1.创建、打开文件 CreateFile()
除了可以打开文件和设备以外,CreateFile还可以打开诸如硬盘,flash卡之类的存储卷。要打开一个卷,必须传递它的名字,并在后面附上/Vol: 。举例来说:要打开一个由目录名Storage Card 代表的CF卡,可以按一下方式:
h= CreateFile(TEXT(“//Storage Card//vol:”),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NOMAL,NULL);
CreateFile函数将返回一个句柄,可以用这个句柄来传递IO控制命令(IOCTL)给挂载这个卷的文件系统驱动程序。
2.读取和写入 ReadFile();读取数据从文件指针所指向的文件中的偏移位置处开始。在读取完成后,文件指针将被调整,调整值取决于所读取的字节数。在调用ReadFile时,如果文件指针指向文件结尾处,也会成功读取,但是读入字节数为0。
写入操作WriteFile();数据被写入由文件指针指向的偏移处,且在每次写入操作后文件指针都会被更新,使得文件指针指向的位置在写入的数据之后。
3.移动文件指针 DWORD SetFilePointer(HANDLE hFile,LONG lDistanceToMove,PLONG lDistanceToMoveHigh,DWORD dwMoveMethod);在文件指针移动完成后,SetFilePointer返回指向新位置处的文件指针。若只想得到当前文件指针指向的位置而不想去改变它,可以方便的通过调用SetFilePointer,并将偏移设置为0,最后一个参数设置为FILE_CURRENT,即可得到当前文件指针位置。
4.关闭文件 BOOL CloseHandle(HANDLE hObject);
5.截短文件。要设置文件结尾,在文件中移动文件指针至你想作为末尾的位置,然后调用BOOL SetEndOfFile(HANDLE hFile);必须对文件有些权限。
要确保所有数据都已经被写入存储设备,而不仅仅是被放置在缓冲区里,可以调用下面的函数:BOOL FlushFileBuffers(HANDLE hFile);注意不要太频繁的调用这个函数,将数据写入flash或是磁盘是比较缓慢的,因此过多的调用这个函数会影响系统的性能。
If you called CreateFileMapping to create a file-mapping object for hFile, you must first call UnmapViewOfFile to unmap all views and call CloseHandle to close the file-mapping object before you can call SetEndOfFile.
6.获得文件信息 DWORD GetFileAttributes(LPCTSTR lpFileName);在WinCE6中,FILE_ATTRIBUTE_TEMPORARY 和FILE_ATTRIBUTE_DIRECTORY一起使用时,表示该目录是一个二级存储设备的根目录,如PC 卡,硬盘驱动器,或是网络共享文件夹。
应用程序可以调用下面的函数来改变文件的属性:SetFileAttributes();
WinCE还支持其他一些获得文件信息的函数。但这些函数要求提供一个文件句柄而不是文件名,因此必须事先调用CreateFile来打开文件。
7.文件时间。标准的win32 API 支持3中文件时间:创建时间,最后访问时间,最后修改时间。但这种支持局限于底层的文件系统。许多文件系统部支持所有的3种文件时间。查询一个文件的文件时间的一种方式是调用下面等这个函数:GetFileTime();返回FILETIME结构体类型。由GetFileTime和其他一些函数返回的FILETIME结构体,可以通过调用下面的函数来转变成可读的数据:
BOOL FileTimeToSystemTime();一个要告诫的是,文件时间是以世界协调时间(UTC,格林威治时间)格式存储的。但是当你将文件时间转化成可以阅读的时间格式时,调用FileTimeToLocalTime().也可以调用SetFileTime()来手动设置文件时间。记住,文件时间必须是UTC时间,不能是当地时间。
8.文件大小和其他信息。GetFileSize()得到文件大小信息。
另外还有一个函数GetFileInformationByHandle,它返回以上函数提供的所有信息,甚至更多。