2010-08-04 184 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