Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::filesystem输出作为LPCWSTR_C++_Windows_Visual Studio 2017_Wininet - Fatal编程技术网

C++ 使用std::filesystem输出作为LPCWSTR

C++ 使用std::filesystem输出作为LPCWSTR,c++,windows,visual-studio-2017,wininet,C++,Windows,Visual Studio 2017,Wininet,我正在制作一个程序,它递归地列出某个目录中的所有文件,并使用WinINet将每个文件分别上传到FTP服务器。 我遇到的问题是在FtpPutFile()函数中使用filesystem::path::filename,因为需要LPCWSTR。 转换它(或以某种方式使用它)的最佳和最简单的方法是什么 我得到的错误是: 不存在从“const std::experimental::filesystem::v1::path”到“LPCWSTR”的适当转换函数 编辑:下面是一个对我有效的解决方案,通过以下亮度

我正在制作一个程序,它递归地列出某个目录中的所有文件,并使用WinINet将每个文件分别上传到FTP服务器。 我遇到的问题是在FtpPutFile()函数中使用filesystem::path::filename,因为需要LPCWSTR。 转换它(或以某种方式使用它)的最佳和最简单的方法是什么

我得到的错误是: 不存在从“const std::experimental::filesystem::v1::path”到“LPCWSTR”的适当转换函数

编辑:下面是一个对我有效的解决方案,通过以下亮度解决方案:

    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);
,及。正如您可能记得的那样,C++字符串也可以通过<代码> CyScript()/<代码>访问它们的字符缓冲区。 因此,
entry.path()。请注意立即使用它,或者将
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
    );
}
,及。正如您可能记得的那样,C++字符串也可以通过<代码> CyScript()/<代码>访问它们的字符缓冲区。 因此,
entry.path()。请注意立即使用它,或者将
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
    );
}

为我工作!“但是你介意解释一下“小心”部分吗?”Apex Sure-Added为我工作!但是你介意解释一下“小心”部分吗?@Apex-Sure-补充道