在我的previous unclear question之後,我以某種方式能夠創建一個長路徑名稱的目錄。但是,如果我嘗試通過添加一個長路徑名稱前綴來訪問它,它仍然會拋出一個錯誤,如下所示。SetCurrentDirectoryW中的錯誤206
ERROR_FILENAME_EXCED_RANGE
206 (0xCE)
The filename or extension is too long.
這裏是我使用(在Windows 7上使用VS 2015年更新3編譯)
#include <iostream>
#include <windows.h>
int main()
{
const std::wstring wdir_path (L"\\\\?\\c:\\temp\\aLongPathnameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent\\aLongPathNameComponent");
if (!SetCurrentDirectoryW(wdir_path.c_str()))
{
printf("SetCurrentDirectory failed (%d)\n", GetLastError());
}
return 0;
}
接下來的代碼片段,我試着用版本比1607更高的Windows 10運行此如前所述在msdn中,我設置了註冊表項並重建了上面的代碼,但是當我運行它時,我仍然得到相同的錯誤。我多次閱讀文檔,我不確定我在這裏做錯了什麼。任何人都可以請我指出正確的方向嗎?
更新
1)這裏是我使用的Windows 7
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<ws2:longPathAware>true</ws2:longPathAware>
</windowsSettings>
</application>
在2提到我也是在註冊表項中增加了一個新的DWORD值)清單文件。但是,在Windows 7上,它不起作用。
2)在Windows 10上,註冊表項方法起作用。我按照文檔修改了以下注冊表項
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
如果我禁用它,則會失敗,反之亦然。
是的,我沒有設置清單條目和註冊表鍵。但沒有運氣。這是否意味着SetCurrentDirectoryW對長路徑名稱的支持被破壞了?只是好奇。 – Recker
Windows 10的版本** 1607 **使長路徑名稱限制得以放寬。 *「1606」*在你的問題中只是一個錯字?你能否包含你的清單文件?另外,請注意[文檔](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365530.aspx):*「空字符前的最後一個字符必須是反斜槓('\' )。「* @DavidHeffernan:文檔顯式調用,您可以啓用此特定API的長路徑感知,從Windows,版本1607開始。文檔是錯誤的,還是您指的是其他限制? – IInspectable
@IInspectable添加對問題的更新。 – Recker