Я пытаюсь открыть файлы на 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
.
BTW, если папка имеет тот, у кого есть акцент, FindFirstFile() терпит неудачу.
Можете ли вы добавить вывод своей программы и имя файла, что является проблематичным? – CollioTV
Как определяется и инициализируется 'ws'? – alk
Я добавил оба – LuisHerranz