C로 파일을 열려고하는데 Windows에 파일에 라틴 문자가 있으면 문제가 발생합니다. 파일이 이상한 성격을 가지고 있지만, 그렇게되면 오류 2 (ERROR_FILE_NOT_FOUND)와 함께 실패하지 않습니다파일에 라틴 문자가있는 경우 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);
완벽하게 작동
이 코드.
이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
두 파일 모두 해당 위치에 있습니다.
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
을 사용하고 있습니다 : -
이 WS의 초기화이다.
- 나는 폴더의 파일을 통해 반복 FindFirstFile을()를 사용하는 경우
나는이 결과를 얻을 :
- 다음 파일 이름이 hola.mp3입니다.
- 다음 파일 이름은 hol □ .mp3입니다.
hol□.mp3
이 holá.mp3
이어야한다는 것을 알리는 방법에 대해서는 잘 모릅니다.
BTW, 폴더가 액센트가있는 경우 FindFirstFile()이 실패합니다.
programm의 출력과 문제가되는 파일 이름을 추가 할 수 있습니까? – CollioTV
''ws'가 어떻게 정의되고 초기화됩니까? – alk
두 개를 모두 추가했습니다 – LuisHerranz