c++ - 重定向 std::list内容到文本文件
问题描述
我正在使用该代码来枚举驱动器中具有特定扩展名的文件并将它们写入文本文件。它在文本文件中输出类似这样的内容。我怎样才能用他们的名字而不是这些垃圾值来写文件地址。00000281BBACF338 00000281BBACEA78 00000281BBACF108 00000281BBAD1E48
#include <Windows.h>
#include <atlpath.h>
#include <list>
#include <iostream>
#include <fstream>
#ifdef _UNICODE
#define cout wcout
#endif
void FindFiles(
const CString& strRootPath,
const CString& strExt,
std::list<CString>& listFiles,
bool bRecursive = true)
{
CString strFileToFind = strRootPath;
ATLPath::Append(CStrBuf(strFileToFind, MAX_PATH), _T("*.*"));
WIN32_FIND_DATA findData = { 0 };
HANDLE hFileFind = ::FindFirstFile(strFileToFind, &findData);
if (INVALID_HANDLE_VALUE != hFileFind)
{
do
{
CString strFileName = findData.cFileName;
if ((strFileName == _T(".")) || (strFileName == _T("..")))
continue;
CString strFilePath = strRootPath;
ATLPath::Append(CStrBuf(strFilePath, MAX_PATH), strFileName);
if (bRecursive && (ATLPath::IsDirectory(strFilePath)))
{
FindFiles(strFilePath, strExt, listFiles);
}
else
{
CString strFoundExt = ATLPath::FindExtension(strFilePath);
if (!strExt.CompareNoCase(strFoundExt))
listFiles.push_back(strFilePath);
}
} while (::FindNextFile(hFileFind, &findData));
::FindClose(hFileFind);
}
}
int main()
{
std::ofstream file;
file.open("test.txt", std::ios::out | std::ios::app | std::ios::binary);
std::list<CString> listFiles;
FindFiles(_T("D:\\"), _T(".txt"), listFiles);
for (const auto& strFile : listFiles)
file << (LPCTSTR)strFile.GetString() << std::endl;
return 0;
}
解决方案
您strfile
转换为LPCTSTR
,并写入 的文件流ofstream
,两者的字符集不匹配。
你可以使用wofstream
来解决这个问题:
std::wofstream file;
或者使用CT2A
函数来转换它:
for (const auto& strFile : listFiles)
file << CT2A(strFile) << std::endl;
推荐阅读
- python - 我收到一条错误消息“KeyError”,Python,Telegram api
- android - Android 应用程序尝试打开 pdf 文件但立即被发回
- windows - 我的电脑!!!无法启动,说 '\Boot\BCD status:0xc000000f'
- python - 为什么即使文件清楚地存在于我的计算机上,python 也不会将其识别为我的数据集?
- android - 从 Internet 提取数据时出现错误
- python - 从一组单词中生成所有可能的正确句子
- python - 尝试使用多个名称条目清理调查结果,一些答案为 NaN
- c# - 如何在旋转平面内获得随机位置(由 X 和 Z 中的中心位置和大小创建)?
- c++ - FFmpeg + cpp,如何获取处理 h264_nvenc 的 GPU 列表?
- python - 为什么每次发生循环时这段代码都会重写列表中的字典?(我最终得到了相同词典的列表)