GetFileSizeEx第二个参数怎么用

时间:2022-01-12 11:26:56
下面代码怎么都不行,输出两个32位的也错,输出一个64位的也错。if判断语句也没发现错误。我这是在WIN8中使用的VC2012,我已经以管理员身份运行的VS,不应该是权限不够吧?
#include<iostream>
#include<Windows.h>
using namespace std;
void main()
{
HANDLE h = CreateFile(L"d:\\java api.chm",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
0,
OPEN_EXISTING ,
0,
0);
if(h==INVALID_HANDLE_VALUE)
{
cout<<"error"<<endl;
return;
}
PLARGE_INTEGER u;
GetFileSizeEx(h, u);
/* cout<< u->HighPart <<endl
<< u->LowPart <<endl;*/
cout<< u->QuadPart <<endl;
}

GetFileSizeEx第二个参数怎么用

14 个解决方案

#1


LARGE_INTEGER u;
GetFileSizeEx(h, &u);

#2


C++基础啊,没学好

LARGE_INTEGER u;
    GetFileSizeEx(h, &u);

#3


回1楼 回2楼
PLARGE_INTEGER 声明的就是指针,你们没用过?奇怪了,换成你们的以后输出都是0

#4


PLARGE_INTEGER u;// 是一个 指针, 但 没说指向哪里?
GetFileSizeEx(h, u); 
//
LARGE_INTEGER u
PLARGE_INTEGER pu=&u;// 

#5


引用 4 楼 schlafenhamster 的回复:

为啥输出的大小是0

#6


引用 3 楼 xiaoyuanyuan2009 的回复:
回1楼 回2楼
PLARGE_INTEGER 声明的就是指针,你们没用过?奇怪了,换成你们的以后输出都是0


如果用PLARGE_INTEGER,需要分配内存
PLARGE_INTEGER u = new PLARGE_INTEGER;
GetFileSizeEx(h, u);
//........
delete u;

#7


引用 6 楼 stjay 的回复:
引用 3 楼 xiaoyuanyuan2009 的回复:回1楼 回2楼
PLARGE_INTEGER 声明的就是指针,你们没用过?奇怪了,换成你们的以后输出都是0

如果用PLARGE_INTEGER,需要分配内存
C/C++ code?1234PLARGE_INTEGER u = new PLARGE_INTEGER;GetFileSizeEx(h, u);//……


PLARGE_INTEGER u = new LARGE_INTEGER;
GetFileSizeEx(h, u);
//........
delete u;

#8


引用 7 楼 stjay 的回复:
……

文件大小怎么是0呢

#9


用:
DWORD GetFileSize(HANDLE hFile,LPDWORD  lpFileSizeHigh);
试试

#10


引用 9 楼 schlafenhamster 的回复:
用:
DWORD GetFileSize(HANDLE hFile,LPDWORD  lpFileSizeHigh);
试试


这个不错,getfilesize完全可以获得的大小




getfilesizeex这个版本没用过

#11


LARGE_INTEGER 是个联合啊。
结构体对象和指针要分清楚。

#12


引用 11 楼 tiger9991 的回复:
LARGE_INTEGER 是个联合啊。
结构体对象和指针要分清楚。

为啥是0呢,怎么才不是0呢

#13


typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
    LONGLONG QuadPart;
} LARGE_INTEGER;

是不是 cout 不支持 LONGLONG
 cout<< u->QuadPart <<endl;

#14


引用 13 楼 schlafenhamster 的回复:
是不是 cout 不支持 LONGLONG

我输出过64位的,好使

#1


LARGE_INTEGER u;
GetFileSizeEx(h, &u);

#2


C++基础啊,没学好

LARGE_INTEGER u;
    GetFileSizeEx(h, &u);

#3


回1楼 回2楼
PLARGE_INTEGER 声明的就是指针,你们没用过?奇怪了,换成你们的以后输出都是0

#4


PLARGE_INTEGER u;// 是一个 指针, 但 没说指向哪里?
GetFileSizeEx(h, u); 
//
LARGE_INTEGER u
PLARGE_INTEGER pu=&u;// 

#5


引用 4 楼 schlafenhamster 的回复:

为啥输出的大小是0

#6


引用 3 楼 xiaoyuanyuan2009 的回复:
回1楼 回2楼
PLARGE_INTEGER 声明的就是指针,你们没用过?奇怪了,换成你们的以后输出都是0


如果用PLARGE_INTEGER,需要分配内存
PLARGE_INTEGER u = new PLARGE_INTEGER;
GetFileSizeEx(h, u);
//........
delete u;

#7


引用 6 楼 stjay 的回复:
引用 3 楼 xiaoyuanyuan2009 的回复:回1楼 回2楼
PLARGE_INTEGER 声明的就是指针,你们没用过?奇怪了,换成你们的以后输出都是0

如果用PLARGE_INTEGER,需要分配内存
C/C++ code?1234PLARGE_INTEGER u = new PLARGE_INTEGER;GetFileSizeEx(h, u);//……


PLARGE_INTEGER u = new LARGE_INTEGER;
GetFileSizeEx(h, u);
//........
delete u;

#8


引用 7 楼 stjay 的回复:
……

文件大小怎么是0呢

#9


用:
DWORD GetFileSize(HANDLE hFile,LPDWORD  lpFileSizeHigh);
试试

#10


引用 9 楼 schlafenhamster 的回复:
用:
DWORD GetFileSize(HANDLE hFile,LPDWORD  lpFileSizeHigh);
试试


这个不错,getfilesize完全可以获得的大小




getfilesizeex这个版本没用过

#11


LARGE_INTEGER 是个联合啊。
结构体对象和指针要分清楚。

#12


引用 11 楼 tiger9991 的回复:
LARGE_INTEGER 是个联合啊。
结构体对象和指针要分清楚。

为啥是0呢,怎么才不是0呢

#13


typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
    LONGLONG QuadPart;
} LARGE_INTEGER;

是不是 cout 不支持 LONGLONG
 cout<< u->QuadPart <<endl;

#14


引用 13 楼 schlafenhamster 的回复:
是不是 cout 不支持 LONGLONG

我输出过64位的,好使