2014-05-12 128 views
-1

最近我遇到了與.Net中的文件/目錄庫中的MAX_PATH問題,所以我開始尋找替代品。從Windows API使用CreateFile拒絕訪問

我試圖從存儲在數據庫中的原始數據重建文件,並且迄今爲止沒有問題使用new FileStream("G:\Location\temp.txt", FileMode.Create)等,但是我被要求更改重建文件的結構,從而碰到字符限制。

我試圖使用從Here的例子,像這樣:

SafeFileHandle fileHandle = CreateFile(strDirectory, 
EFileAccess.GenericWrite, EFileShare.None, IntPtr.Zero, 
ECreationDisposition.OpenAlways, 0, IntPtr.Zero); 

int lastWin32Error = Marshal.GetLastWin32Error(); 
if (fileHandle.IsInvalid) 
{ 
    throw new System.ComponentModel.Win32Exception(lastWin32Error); 
} 

strDirectory = "G:\Really\Long\Folder\Structure\Temp.txt"

不過,我發現了一個「訪問被拒絕」的異常被拋出。我對目標文件夾有完整的讀/寫權限,所以我不確定問題可能是什麼。

任何幫助將不勝感激。

+0

非逐字字符串文字中的反斜槓必須轉義:'「G:\\真正的\\長\\文件夾\\結構\\ Temp.txt」或「@」G:\ Really \ Long \文件夾\結構\ TEMP.TXT「'。 –

+0

在我看來,對於操作系統的限制似乎是一個不好的解決方案......在這種情況下會使用這些書面文件嗎?我不認爲資源管理器甚至會看到它們...... – spender

+0

G是網絡共享嗎? – spender

回答

2

爲了繞過MAX_PATH限制,您必須在路徑前添加字符串\\?\。這是記錄在CreateFile MSDN信息其中說明:

在該函數的ANSI版本中,名稱被限制爲MAX_PATH個字符。要將此限制擴展到32,767個寬字符,請調用該函數的Unicode版本並將"\\?\"添加到該路徑。有關更多信息,請參閱Naming Files, Paths, and Namespaces