现在的位置: 首页 > 综合 > 正文

Wince中的文件操作

2013年11月02日 ⁄ 综合 ⁄ 共 3150字 ⁄ 字号 评论关闭

序言

Wince中的文件操作使用传统的基于句柄的方法;文件通过返回句柄的函数打开;读取和写入函数被传递句柄以便指出要操作的函数;数据在文件中读取和写入的偏移量由系统维护的文件指针来指出;最后当读取和写入完成时,应用程序通过关闭文件句柄来表示操作的结束。

正文

1.1 创建和打开文件

 HANDLE CreateFile( LPCTSTR lpFileName,

                                     DWORD  dwDesiredAccess,

                                     DWORD   dwShareMode,

                                     LPSECURITY_ATTRIBUTE  lpSecurityAttribute,

                                     DWORD dwCreationDisposition,

                                     DWORD dwFlagsAndAttribute,

                                     HANDLE hTemplateFile

                                    );

lpFileName---要打开或创建的文件名。文件名称应包括完全指定的路径,对于没有路径信息的文件名,系统默认为在对 象存储库的根目录下。

dwDesiredAccess---指出所需的访问权限。允许使用的标志是用来请求  对文件进行读取访问的GENERIC_READ和对文件进行写入访问的GENERIC_WRITE。要获取文件的读取/写入访问必须同时传递两个参数。

dwShareMode---指定了可以给于其他进程的访问权限。可以为FILE_SHARED_READ/FILE_SHARED_WRITE。

lpSecurityAttribute---Wince忽略该参数,设为NULL。

dwCreationDisposition---确定如何打开或创建文件。可取如下值:

                 CREATE_NEW      创建一个新文件,如果该文件存在,则该函数将失败。

                 CREATE_ALWAYS       创建一个新文件或截断一个现有文件。

                 OPEN_EXISTING       仅当文件存在时才打开文件。

                 OPEN_ALWAYS       打开一个文件,如果该文件不存在就创建一个文件。这与CREATE_ALWAYS不同,因为如果文件存在,它不会将文件截断到0字节。

                 TRUNCATE_EXISTING       打开文件并将其截断到0字节。如果文件不存在,则该函数失败。

dwFlagsAndAttribute---定义文件的属性标志。Wince允许的标志如下:

                 FILE_ATTRIBUTE_NORMAL    默认属性,将被任意其他属性标志所覆盖。

                 FILE_ATTRIBUTE_READONLY     只读属性

                 FILE_ATTRIBUTE_ARCHIVE     存档属性    

                 FILE_ATTRIBUTE_SYSTEM     系统属性

                 FILE_ATTRIBUTE_HIDDEN    隐藏属性

                 FILE_FLAG_WRITE_THROUGH    对文件的写操作不会被存储到内存中  

                 FILE_FLAG_RANDOM_ACCESS     向系统表明该文件将被随机访问而不是顺序访问。

hTemplateFile---忽略,设为0。  

 1.2  读取和写入

BOOL ReadFile( HANDLE hFile,

                             LPVOID lpBuffer,

                             DWORD nNumberOfBytesToRead,

                             LPDWORD lpNumberOfBytesRead,

                             LPOVERLAPPED lpOverlapped

                           );

hFile---要读取的已打开文件的句柄。

lpBuffer---指向接收数据的缓冲区的指针。

nNumberOfBytesToRead---要从文件中读取的字节数。

lpNumberOfBytesRead---指向接收实际读取的字节数的DWORD指针。

lpOverlapped---必须设置为NULL,Wince不知吃重叠文件操作。

注:数据的读取从文件指针所指定的文件偏移量开始,在读取完成后,将通过读取的字节数对文件指针进行调整。

BOOL WriteFile( HANDLE hFile,

                             LPVOID lpBuffer,

                             DWORD nNumberOfBytesToWrite,

                             LPDWORD lpNumberOfBytesWritten,

                             LPOVERLAPPED lpOverlapped

                           );

该函数参数基本与ReadFile相同,只是lpBuffer现在指向的是要写入到文件中的数据。

1.3 移动文件指针

DWORD SetFilePointer( HANDLE hFile,

                                          LONG IDistanceToMove,

                                          PLONG lpDistanceToMoveHigh,

                                          DWORD dwMoveMethod

                                       );

hFile---文件句柄。

IDistanceToMove---移动文件指针的有符号偏移量距离,一个有符号32位值。

lpDistanceToMoveHigh---若文件指针移动距离超过4GB,该参数应指向一个包含移动距离的高32位偏移量的长整数,否则设为NULL。

dwMoveMethod---指出如何解释偏移量。

FILE_BEGIN    偏移量将从文件的开始算起;

FILE_CURRENT    偏移量将从文件的当前位置算起;

FILE_END    偏移量从文件的末尾算起;

注:SetFilePointer函数在移动完成之后将返回在新位置的文件指针。若想查询当前文件位置而不改变文件指针,只需使用零偏移量和相对于文件中的当前位置来调用SetFilePointer函数,如下:nCurrFilePtr = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);

1.4 关闭文件

CloseHandle(HANDLE hObject);

抱歉!评论已关闭.