FindNextFile返回的文件夹名称存在问题
Issue with Folder names returned by FindNextFile
我对FindNextFile
有一个相当棘手的问题。我在下面附上了相关的代码块。
该代码在99%的情况下都能完美工作。问题是当文件夹名称以浮点值开头时。我有一个包含"0.0W"
、"1.0W"
、"3.9W"
、"4.1W"
和"7.0W"
的文件夹。这些是驱动器上文件夹的名称。当我试图从返回的CCD_ 7结构中获取字符串时。我获取了参数lcFindData.cFileName
,它是一个宽字符串,内容不正确。
即
"0.0W"
返回为"0W"
"1.0W"
返回为"1W"
"3.9W"
返回为"3.9W"
"4.1W"
返回为"4.1W"
"7.0W"
返回为"7.0W"
就我所见,它是将浮点转换为浮点,然后将它们转换回字符串,使它们不准确。除了7.0W
,它似乎很高兴。。。
void nsDialogFunctions::cFileList::ListFolders(string lsPath,uint32 liMax)
{
//Empty List
SetItems(0);
lsPath+="/*";
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA lcFindData;
//Find First Folder (".")
hFind = FindFirstFile(nsConversionFunctions::ConvertToWString(lsPath).c_str(),&lcFindData);
DWORD dwError=0;
if (INVALID_HANDLE_VALUE == hFind)
{
return;
}
// Fins Second Folder ("..")
FindNextFile(hFind, &lcFindData);
//Find first valid folder
FindNextFile(hFind, &lcFindData);
// List all the files in the directory with some info about them.
do
{
if ((lcFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
string *lcTemp=new string;
//lcFindData.cFileName is sometimes wrong here.
//It is wrong before entering ConvertWString
lcTemp[0]=nsConversionFunctions::ConvertWString(lcFindData.cFileName);
Add(lcTemp);
}
}
while (FindNextFile(hFind, &lcFindData) != 0 && (!liMax || Items()<liMax));
FindClose(hFind);
return;
};
我的hFind
有什么问题吗?
有没有一个我可以改变的设置来消除这种行为?
是否有其他访问点用于获取返回的字符串?
FindFirstFile
、FindNextFile
返回文件系统对象的正确名称。然后,ConvertWString
中的代码将这些名称修改为您看到的值。
我不太喜欢您使用8位文本的决定,当然,除非该文本是UTF-8编码的。如果您的文本是ANSI编码的,那么使用广泛的API就没有任何好处。您最好拨打FindFirstFileA
、FindNextFileA
等电话,让系统进行文本转换。它肯定会做对的!
相关文章:
- C++Builder中的OnClick事件签名存在问题
- 在 C++ 中使用逗号的 echo 命令中存在问题
- Malloc 在使用线程并行化 SSH 调用时存在问题
- 构造函数 (C++) 中的 char 指针参数存在问题
- 在 boost::variant 中类 holden 的复制构造函数存在问题
- 用户定义的文本运算符(在原始模式下)存在问题
- C++中的数组存在问题
- C++中的正则表达式存在问题
- 英特尔 DAAL 头文件可能存在问题
- 错误:"参数"没有命名类型,.cpp和 .h 文件可能存在问题
- 我的 IF 语句中存在问题,否则无法正常工作
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- template_back和move赋值构造函数存在问题
- CMake 3.13.2 似乎在 G++ 8.2.0 中存在问题
- 使用Boost的班级名称冲突是否存在问题
- CMAKE:目标依赖项存在问题(add_dependency不起作用?
- C SQLITE3代码似乎在准备声明方面存在问题
- 此UUID生成代码是否存在问题
- 派生类中的模板存在问题
- 从多线程.net应用程序调用的本机dll中的tbb存在问题