我試圖在C中打開文件,但當文件在Windows中具有拉丁字符時遇到問題。當文件具有拉丁字符時CreateFile失敗(ERROR_FILE_NOT_FOUND)
此代碼
hFile = CreateFileW(ws, // file to be opened
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // open existing file only
FILE_ATTRIBUTE_NORMAL |FILE_ATTRIBUTE_ARCHIVE | SECURITY_IMPERSONATION,
// normal file archive and impersonate client
NULL); // no attr. template
if(hFile == INVALID_HANDLE_VALUE)
printf("Could not open %ls file, error %d\n", ws, GetLastError());
else
printf("File's HANDLE is OK!\n");
// when finished, close the file handle
CloseHandle(hFile);
作品完全當文件沒有任何奇怪的字符,但失敗,錯誤2(ERROR_FILE_NOT_FOUND)當它。
-
例如,此文件:
C:\Documents and Settings\Administrador\Escritorio\hola.mp3
輸出
File's HANDLE is OK!
但有了這個文件:
C:\Documents and Settings\Administrador\Escritorio\holá.mp3
輸出
Could not open C:\Documents and Settings\Administrador\Escritorio\holá.mp3 file, error 2
這兩個文件都存在於該位置。
-
這是WS的初始化:
char* filename;
wchar_t ws[256];
// I get the filename from the SDK I am using (Cycling'74 Max SDK)
filename = (atom_getsym(argv))->s_name;
// and convert it to UTF16
AnsiToUnicode16(filename, ws, 256);
AnsiToUnicode16
使用MultiByteToWideChar
做轉換。
-
當我用用FindFirstFile()迭代直通文件夾中的文件,我得到這個結果:
- 下一個文件名是hola.mp3。
- 下一個文件名是hol□.mp3。
我不知道如何讓它知道hol□.mp3
應該是holá.mp3
。
順便說一句,如果該文件夾是具有重音的文件夾,則FindFirstFile()失敗。
你可以添加你的程序的輸出,和有問題的文件名? – CollioTV 2014-09-05 09:05:40
請問ws是如何定義和初始化的? – alk 2014-09-05 09:19:42
我已經添加了兩個 – LuisHerranz 2014-09-05 09:28:18