2010-08-04 148 views
0

請參閱代碼:無法打開的句柄

int main(int argc,LPTSTR argv[]) 
{ 
HANDLE hinFile; 
BOOL check; 
PLARGE_INTEGER file_size; 
hinFile=CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
if(hinFile==INVALID_HANDLE_VALUE) 
    {printf("INVALID_HANDLE_VALUE\nFile Does Not Exist");exit(0);} 
else{ 
    check=GetFileSizeEx(hinFile,file_size); 
    printf("The Size of File is %d",file_size); 
} 
return 0; 
} 

現在,在上面的程序我是否嘗試在可執行文件的目錄中打開文件或我指定的路徑作爲命令行參數,只輸出我得到的是:

INVALID_HANDLE_VALUE \ n文件不存在

請解釋爲什麼發生這種情況?

+4

您是否嘗試調用GetLastError()來獲取更具體的錯誤描述? – OregonGhost 2010-08-04 10:32:51

+2

你是否將它編譯爲unicode? – sje397 2010-08-04 10:35:15

+0

從我的答案修改後的版本效果很好。給我們命令行。對於命令行參數使用引號(如「帶路徑和空格的文件名」)。 – INS 2010-08-04 11:25:44

回答

2

我修改了一點你的代碼,使其工作。

#include <windows.h> 
#include <stdio.h> 
#include <tchar.h> 

int _tmain(int argc, TCHAR *argv[]) 
{ 
HANDLE hinFile; 
BOOL check; 
LARGE_INTEGER li; 
PLARGE_INTEGER file_size; 

file_size=&li; 

hinFile=CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
if(hinFile==INVALID_HANDLE_VALUE) 
{ 
    printf("INVALID_HANDLE_VALUE\nFile Does Not Exist"); 
} 
else 
{ 
    check = GetFileSizeEx(hinFile,file_size); 
    printf("The Size of File is %I64d",file_size->QuadPart); 
} 
return 0; 
} 

我使用Visual Studio 2005(8.0版)進行了測試。

+1

沒有它沒有工作。 – Sadique 2010-08-04 12:24:49

+1

讓我看看你正在使用的命令行。 – INS 2010-08-04 12:34:06

+1

這是我輸入的內容: c:> getfilesize.exe「D:\ Image.nrg」 – Sadique 2010-08-04 16:44:45