我有一個相當尷尬的問題FindNextFile
。我附上了下面的相關代碼塊。FindNextFile返回文件夾名稱的問題
該代碼完全適用於99%的案例。問題是當文件夾名稱以浮點值開頭時。我有一個文件夾包含"0.0W"
,"1.0W"
,"3.9W"
,"4.1W"
和"7.0W"
。這些是驅動器上文件夾的名稱。當我嘗試從返回的WIN32_FIND_DATA
結構中抓取字符串時。我抓住參數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
?
有沒有可以改變的設置來消除這種行爲?
是否有另一個獲取返回字符串的接入點?
1. ConvertWString是做什麼用的? 2.你爲什麼要這樣做'lcTemp [0] = nsConversionFunctions :: ConvertWString(lcFindData.cFileName);'? –
ConvertWString將寬字符字符串或wchar *轉換爲char字符串。由於使用了各種其他庫和功能,我們使用std :: string作爲我們的默認文本容器 –
Thormidable
我相信問題在'nsConversionFunctions :: ConvertWString'中。 FindNextFile不會自行進行任何轉換,它會以「原樣」的形式返回文件名。如果你可以提供[SSCCE](http://www.sscce.org/) – Ryzhehvost