使用 std::文件系统输出作为 LPCWSTR
Using std::filesystem output as LPCWSTR
我正在制作一个程序,该程序递归列出某个目录中的所有文件,并使用WinINet将每个文件分别上传到FTP服务器。我遇到的问题是在 FtpPutFile() 函数中使用 filesystem::p ath::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);
我得到的错误是:不存在从"const std::experimental::filesystem::v1::p ath"到"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);
LPCWSTR
是Microsoft对const wchar_t*
类型的混淆,filesystem
路径方便地具有wstring()
成员函数。您可能还记得,C++字符串也允许您通过 c_str()
访问其字符缓冲区。
所以,entry.path().filename().wstring().c_str()
是您可以使用的LPCWSTR
(呃!请注意立即使用它,或者只要您需要LPCWSTR
生存,就可以将wstring()
的结果存储在某个地方,因为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++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- libstdc++ 文件系统中未初始化的用法?
- boost::文件系统::recursive_directory_iterator多线程安全
- C++17 文件系统::remove_all 带有通配符路径
- 实验性文件系统库不完整C++?
- 使用文件系统时仍然需要链接到带有 C++20 的 stdc++fs?
- 无法链接文件系统库C++
- 无法识别 Mac c++ 文件系统库
- 使用Boost文件系统C++将具有特定扩展名的文件的名称保存在特定文件夹中
- 获取 clang++:错误:在编译文件系统库的代码时
- C++17 文件系统在 Windows 10 上使用 nuwen MinGW
- C++ VS 错误:<实验/文件系统>提供 std::experimental::文件系统的标头已被Microsoft弃用,将被删除
- 如何修复 MinGW 文件系统探针?
- 将 boost::文件系统::p ath 转换为 char?
- 我可以在 ndk 中使用带有 libc++ 的实验性文件系统吗?
- 是否可以使用 std::文件系统获取根名称列表?
- 使用 std::文件系统输出作为 LPCWSTR