首页澳门新葡亰官方网站 › 澳门新葡亰登录Windows获取文件大小,获取文件大小

澳门新葡亰登录Windows获取文件大小,获取文件大小

Windows获取文件大小,获取文件大小

Windows最初的设计允许我们处理非常大的文件,所以最初的设计者选用64位值来表示文件大小。但是我们在日常处理过程中文件大小一般不会超过4GB。故Windows提供了两个联合类型的数据结构表示文件大小。

//64位有符号形式

typedef union _LARGE_INTEGER {

 struct {     DWORD LowPart;          //低字节,32位无符号数     LONG HighPart;            //高字节,32位有符号数 }; LONGLONG QuadPart;        //64位有符号数

} LARGE_INTEGER, *PLARGE_INTEGER;

//64位无符号形式

typedef union _ULARGE_INTEGER {

 struct {     DWORD LowPart;                            //低字节,32位无符号数     DWORD HighPart;                            //高字节,32位无符号数 }; ULONGLONG QuadPart;                        //64位无符号数

} ULARGE_INTEGER, *PULARGE_INTEGER;

  1. 获取文件的逻辑大小

BOOL GetFileSizeEx(

 HANDLE hFile;                         //已打开的文件句柄 PLARGE_INTEGER pliFileSize;      //64位有符号形式文件大小结构指针

);

  1. 获取文件的物理大小

DWORD GetCompressedFileSize(

 PCTSTR pszFileName;                //文件路径字符串 PDWORD pdwFileSizeHigh;          //指向保存文件大小高32位值的指针

);

文件返回64位无符号形式的文件大小,文件大小的低32值通过返回值返回,高32位值保存在参数pdwFileSizeHigh指向的DWORD中。使用ULARGE_INTEGER结构获取物理文件大小的方式如下:

ULARGE_INTEGER ulFileSize;

ulFileSize.LowPart = GetCompressedFileSize(TEXT("SomeFile.dat"),

 &ulFileSize.HighPart);

64位无符号文件大小就保存到 ulFileSize.QuadPart中了。

  1. 逻辑大小与物理大小的区别

举个例子,假设一个文件的逻辑大小为100KB经过压缩之后只占用85KB物理空间,那么调用GetFileSizeEx返回的大小就是100KB,而调用GetCompressedFileSize返回的是文件在磁盘上实际占用的字节数85KB。

Windows最初的设计允许我们处理非常大的文件,所以最初的设计者选用64位值来表示文件大小。但是我们...

 

 

在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等。读写文件最为直接的方式是使用ReadFile和WriteFile函数,也可以使用文件镜像,获取文件大小一般使用GetFileSize函数,也可以使用GetFileAttributesEx等函数(在上节介绍)。读写文件、获取文件大小之前都需要使用CreateFile创建或打开的文件,获得文件句柄。
在文件操作中,文件句柄是一个关键的概念。文件句柄惟一标识了一个文件,ReadFile、WriteFile、GetFileSize等函数是使用文件句柄作为参数来表示,用户需要读、写、获取大小的文件是哪一个文件。在对文件进行操作前,都必须要使用CreateFile获得文件句柄。

 

(1)CreateFile
CreateFile是文件操作中最主要的一个函数。几乎所有的文件操作都需要使用到文件句柄。而CreateFile函数为这些操作建立文件句柄。CreateFile函数的参数多,而且比较复杂,涉及文件名、文件的共享模式、存取方式、操作模式、权限、标志和文件属性等。每一个参数都可以有多种值可供选择,代表了不同的意义。

◇参数
lpFileName:输入参数,操作对象文件的相对路径或绝对路径。
dwDesiredAccess:输入参数,指明对文件对象的操作存取方式,可以是GENERIC_READ,表示需要读文件;可以是GENERIC_WRITE,表示需要写文件;也可以是GENERIC_READGENERIC_WRITE,表示既可以读也可以写。
dwShareMode:输入参数,共享模式。指明与其他进程是否共享该文件,可以是共享读(FILE_SHARE
DELETE)、共享写(FILE_SHARE_WRITE)、共享删除(FILE_SHARE.READ),如果要指明多个属性,使用“位与~‘I”运算。如果指明上述参数,其他进程就可以对文件进行相关操作。如果本进程需要独占本文件,则将本参数设置为0。

lpSecurityAttributes:指向SECURITY_ATTRIBUTES结构的指针,表示本文件句柄的安全属性,能影响其是否可被子进程继承等操作。如果设定为NULL,则子进程不可继承本句柄。SECURITY
ATTRIBUTES结构不常用,对此数据结构的设置,涉及Windows系统中对权限管理的原理,在本章中不作详细说明。

dwCreationDisposition:输入参数,操作模式。

dwFlagsAndAttributes:输入参数,文件属性和文件标志

一般情况下文件属性较常用,而操作标志不常用,可以使用“1”运算符指定多个属性和标志。
hTemplateFile:输入参数,当存取权限包括GENERIC_WRITE时,可以设置为一个模板文件的句柄。一般情况下,可设置为NULL,表示不使用模板文件。
◇返回值
返回HANDLE数据类型值,表示文件的句柄,如果返回INVALID_HANDLE_VALUE,表示操作失败。

 

(2)ReadFile。
ReadFile动能是从文件中读出数据。需要使用CreateFile所返回的文件句柄。

◇参数
hFile:输入参数,读取数据的文件对象,由CreateFile创建,调用CreateFile打开文件时需要指明GENERIC_READ读取操作模式。
lpBuffer:输入参数,指向读取文件数据存储的内存缓冲区。
nNumberOfBytesToRead:输入参数,指明需要从文件中读出的数据的大小,不能大于lpBuffer内存块的大小,否则会造成溢出。
lpNumberOfBytesRead:输出参数,指向存储实际读出的数据大小的DWORD变量。在读文件时,可能由于已经到达文件尾等原因,其值可能小于rtNumberOfBytesToRead。如果lpOverlapped为NULL,则该参数不能为NULL。
lpOverlapped:输入参数,指向OVERLAPPED结构体的指针,如果调用CreateFile时设置了FILE_FLAG_OVERLAPPED标志,则需要使用该参数,否则可以为NULL。
◇返回值
返回BOOL值,表示读文件是否成功。
◇使用说明
在读的过程中,文件指针会随着读操作的进行而自动移动,在循环调用本函数时,会顺序读出文件的内容,如果程序返回失败,可以使用GetLastError函数获取错误信息。

 

(3)WriteFile。
WriteFile函数的功能是将数据写入到文件中,写入到文件指针所在的位置,写入操作完成后,文件指针会移动到写入的数据之后

转载本站文章请注明出处:澳门新葡亰官方网站 http://www.radioritmo-bl.com/?p=544

上一篇:

下一篇:

相关文章