Ape*_*pex 1 c++ windows wininet visual-studio-2017
我正在制作一个程序,以递归方式列出某个目录中的所有文件,并使用WinINet将每个文件分别上传到FTP服务器.我遇到的问题是在FtpPutFile()函数中使用filesystem :: path :: filename,因为需要LPCWSTR.什么是最好和最简单的转换方式(或以某种方式使用它)?
std::string path = "C:\\Programs";
for (const auto & entry : std::experimental::filesystem::recursive_directory_iterator(path))
FtpPutFile(hIConnect, entry.path().filename(), entry.path().filename(), FTP_TRANSFER_TYPE_BINARY, 0);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:没有合适的转换函数从"const std :: experimental :: filesystem :: v1 :: path"到"LPCWSTR"存在
编辑:这是一个适合我的解决方案,遵循Lightness解决方案:
std::string path = "C:\\Programs";
for (const auto & entry : std::experimental::filesystem::recursive_directory_iterator(path))
FtpPutFile(hIConnect, entry.path().wstring().c_str(), entry.path().filename().wstring().c_str(), FTP_TRANSFER_TYPE_BINARY, 0);
Run Code Online (Sandbox Code Playgroud)
LPCWSTR是Microsoft对const wchar_t*类型的混淆,并且filesystem路径方便地具有wstring()成员函数.您可能还记得,C++字符串也允许您访问其字符缓冲区c_str().
所以,entry.path().filename().wstring().c_str()是一个LPCWSTR你可以使用(啊!).小心立即使用它,或者存储wstring()某个地方的结果,只要你需要LPCWSTR生存,因为wstring()按值返回并且你不想要一个悬空指针.
// Untested, but a logical adaptation of your code
const std::string path = "C:\\Programs";
std::experimental::filesystem::recursive_directory_iterator it(path);
for (const auto& entry : it)
{
const std::wstring filename = entry.path().filename().wstring();
FtpPutFile(
hIConnect,
filename.c_str(),
filename.c_str(),
FTP_TRANSFER_TYPE_BINARY,
0
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |