2011-08-25 8 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()의 오류 출력은 NULL이 아닌 INVALID_HANDLE_VALUE입니다. 이제 NULL은 파일 핸들에 대한 잘못된 값처럼 들리지만 여전히 그렇습니다.

붙인 코드 스 니펫이 프로그램의 내용과 정확하게 일치합니까?

편집 : VM이 관련되어 있습니다. 프로그램이 실행되고 오류가 발생하는 가상 컴퓨터에서 메모 파일 을 열 수 있습니까??

+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'이어야합니다. –

관련 문제