1: void Win32UnicodeName(void)
2: { 3: WCHAR wszLongLongName[] = L"\\\\?\\c:\\temp\\"
4: L"123456789012345678901234567890"
5: L"123456789012345678901234567890"
6: L"123456789012345678901234567890"
7: L"123456789012345678901234567890"
8: L"123456789012345678901234567890"
9: L"123456789012345678901234567890"
10: L"123456789012345678901234567890"
11: L"123456789012345678901234567890"
12: L"123456789012.txt";
13:
14: HANDLE hLongFile = CreateFileW(wszLongLongName, GENERIC_READ | GENERIC_WRITE,
15: 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
16:
17: if(hLongFile == INVALID_HANDLE_VALUE) { 18: _tprintf(_TEXT("Error:%ld\n"), GetLastError()); 19: }else{ 20: CloseHandle(hLongFile);
21: }
22:
23: char szLongLongName[] = "\\\\?\\c:\\temp\\"
24: "123456789012345678901234567890"
25: "123456789012345678901234567890"
26: "123456789012345678901234567890"
27: "
123456789012345678901234567890
" 28: "
123456789012345678901234567890
" 31: "
123456789012345678901234567890
" 32: "
123456789012345678901234567890
" 33: "123456789012345678901234567890"
34: "1234567890.txt";
35: hLongFile = CreateFileA(szLongLongName, GENERIC_READ | GENERIC_WRITE,
36: 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
37: if(hLongFile == INVALID_HANDLE_VALUE) { 38: _tprintf(_TEXT("Error:%ld\n"), GetLastError()); 39: }else{ 40: CloseHandle(hLongFile);
41: }
42: }
GetLastError()の戻り値、123はERROR_INVALID_NAME(無効なファイル名)です。206はERROR_FILENAME_EXCED_RANGE(ファイル名が期待した長さを超えている)です。
CreateFileA(ANSI版)では相変わらず同じエラーですが、CreateFileWでは正しく作れています。ところが作れたファイルも、実は意外な落とし穴があります。