2011-08-25 87 views
0

我寫了一個示例應用程序從另一個文件中讀取文件。當我運行這個應用程序表單虛擬機時,我得到了拒絕訪問。以下是代碼。CreateFile()失敗GetLastError()= 5

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    WCHAR *wcsPath = L"\\\\150.160.130.22\\share\\123.XML"; 

    HANDLE hFile = CreateFileW(wcsPath, 
           GENERIC_READ, 
           FILE_SHARE_READ, 
           NULL, 
           OPEN_EXISTING, 
           0, 
           0); 

    if (NULL == hFile) 
    { 
     printf("failed - %d", GetLastError()); 
    } 

    return 0; 
} 

請讓我知道任何更改。

+0

看看你是否可以用記事本打開上述文件。權限是每個用戶,而不是每個程序 - 如果你不能從記事本中讀取它,你的程序也不會。 –

+0

我可以在記事本中打開它 –

+0

您必須檢查運行該程序的用戶是否有權打開該文件,打開該共享的權限以及該文件未在另一個程序中打開。 – plodoc

回答

7

錯誤代碼5代表「訪問被拒絕」。你應該檢查你的用戶的訪問權限。

+0

是的,它具有讀取權限。 –

+0

誰?你用什麼賬號來運行你的程序? – agibalov

+0

我登錄用戶 –

1

CreateFileW()的錯誤輸出是INVALID_HANDLE_VALUE,而不是NULL。現在,對於文件句柄而言,NULL肯定聽起來像是一個錯誤的值,但仍然如此。

粘貼的代碼片段與您的程序的內容完全相同,還是重複嗎?

編輯:我看到有一個虛擬機參與。您可以從程序運行的虛擬機在記事本中打開文件,並且出錯

+0

我改變了只有IP地址 –

+0

是的,你是對的,如果失敗它會給INVALID_HANDLE_VALUE。 –

+0

是的,我可以從記事本中打開它 –

1

我相信the documentation for CreateFile有答案。

可能是您的dwShareMode是造成這個問題。那裏使用FILE_SHARE_READ說,「允許其他開放者打開文件以便讀取」。如果你沒有指定FILE_SHARE_WRITE`,那麼其他開啓者將不能打開文件進行寫入 - 你的調用會阻止這種情況發生。

但是,我相信CreateFile在先前的開啓者違反共享模式時也會失敗。如果這是真的,那麼如果另一個應用程序已經打開了寫訪問權限的文件,那麼如果指定了dwShareMode = FILE_SHARE_READ,那麼對CreateFile的調用將會失敗。你有看到?您可能需要爲該dwShareMode參數指定FILE_SHARE_WRITE | FILE_SHARE_READ

試試吧。

+4

這可能不是這種情況 - 不兼容共享模式的錯誤消息應該是'ERROR_SHARING_VIOLATION'。 –

相關問題