如何取得.dat格式文件的大小?Filesize 函数可以吗?(30分)

  • 主题发起人 主题发起人 ghose
  • 开始时间 开始时间
GetFileSize()
 
我测试了,但好象GetFileSize()的参数要求是cardinal类型的,应该怎么转化呢?
 
你按住Ctrl键然后单击一Cardinal变量,可以对变量类型进行追踪,最终追踪到的变量类型知道你知道Delphi有哪些变量,你就应该知道Cardinal到底是什么类型的。
 
to loveinger_2000
我知道Cardinal的类型啊,可是现在我想得到.dat文件的大小啊,FileSize好象不行,而我用GetFileSize()得到的值都是-1,我对API还是入门阶段,有谁能帮帮我啊……
 
FileSize返回值是Integer,只能得到最大2G文件的大小,参数是用AssignFile得到的值,看看帮助,我记得有个例程
GetFileSize是API,第1个参数用CreateFile得到,第二个参数传递一个文件大小的高字,与返回值组合在一起可以得到大于2G文件的大小
 
To pihome:
刚才突然上不了网。
我用AssignFile,然后在用Reset打开,再用FileSize的时候出现了File access denied的错误,我不知道为什么被拒绝,但当不用.dat文件而用.txt文件来获取大小的时候就正常,我不懂但我猜可能与读取方式有关,是吗?
当我用GetFileSize的时候,返回值都是-1,第二个参数的值倒是不同,不过那好象是十六进制的,我就不知道这两个之间的差值怎么算?
顺便再问:很奇怪的,两个文件在同一目录下,我都用CreateFile获取(我不知道那是不是叫句柄的东东),这两个值都是相等的,这是为什么?我用FileOpen来得到也一样,都是4294967295 !
 
可能你的参数用错了吧,全文检索看看以前别人写的
4294967295 = INVALID_HANDLE_VALUE = -1
 
不知道为什么,我的电脑的检索老是出错:网页上有错误 ……
我先检查下参数看看~
 
to pihome 前辈:
看我的程序,我不知道是否正确……
var
mhandlefile:Thandle;
sizeL:dword;
sizeH:^dword;
begin

mhandlefile:= CreateFile('//?/d:/100002',
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
0,
0);
sizeL:=getfilesize(mhandlefile,sizeH);//用单步运行可以看到sizeH有个十六
//进制的值,sizeL也有个值,是不是
//它们的差值就是文件的大小呢?我把
//sizeH转成十进制,然后减去sizeL得
//到一个值,与属性中的文件大小比较
//好象有点偏大……是不是不是这样来
//取得大小的呢?
showmessage(inttostr(sizeH^));//这里出异常,好象sizeH=nil ??那么我该如何
//取得它们的差值呢?
 
var
mhandlefile:Thandle;
sizeL:dword;
sizeH:[red]dword[/red];
begin

mhandlefile:= CreateFile('//?/d:/100002',
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
0,
0);
sizeL:=getfilesize(mhandlefile,[red]@sizeH[/red]);//用单步运行可以看到sizeH有个十六
//进制的值,sizeL也有个值,是不是
//它们的差值就是文件的大小呢?我把
//sizeH转成十进制,然后减去sizeL得
//到一个值,与属性中的文件大小比较
//好象有点偏大……是不是不是这样来
//取得大小的呢?
showmessage(inttostr(sizeH shl 32 or sizeL));//这里出异常,好象sizeH=nil ??那么我该如何
//取得它们的差值呢?
CloseHandle(mHandleFile);
 
谢谢pihome前辈,同时谢谢各位支持,散分
 
后退
顶部