我寫了一個小程序,經常打開小的用戶文本文件,直到現在還沒有遇到任何讀/寫訪問或任何衝突問題。這些文件是在另一個我無法控制的軟件中選擇的,並以字符串形式傳給我。爲什麼CreateFile無法通過網絡共享打開文件?
當試圖從映射的網絡驅動器打開文件時我得到一個「系統找不到指定的路徑」錯誤(GetLastError()= 3)。
該調用顯示如下,*iNCfileName = "z:\\Validation\\Sample Files\\1_1-4 120MM.CC"
,其中Z:是我們域上的映射文件夾。
iNCfile = CreateFile(iNCfileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (iNCfile == INVALID_HANDLE_VALUE)
{
string msg; // lots of better ways to get this printed ... but ...
dw = GetLastError();
msg = iNCfileName;
msg += ": ";
msg += _com_error(dw).ErrorMessage();
print_error(dw , (char*)msg.c_str());
return 102;
}
如果我把它複製到本地硬盤上,該文件將從我的程序打開。它也會在映射驅動器的記事本中打開。
這可能是「Z:\ whatever.txt」映射表示和真實文件名(\ mydomain \ Validation \ S .... ??)之間的問題嗎?
如果是這樣,我怎樣才能以編程方式從一個轉換到另一個(假設我不會提前知道域/共享名稱)?
如果它有什麼區別,我使用VS2010和應用程序在Win XP機器上執行。
在我之後重複:「我將使用'GetLastError()'。」 – 0xC0000022L 2012-03-06 16:28:44
調用GetLastError()並獲取特定的失敗值。 – 2012-03-06 16:29:01
除了'GetLastError()',你能顯示'iNCfileName'的填充。 – hmjd 2012-03-06 16:29:47