序言
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);