打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Windows CE文件操作
文件操作
    应用程序中很多时候需要创建、打开不同格式的文件,存储或者读取不同格式的数据信息。
——————————————————————————————————
一 使用Windows CE提供的API函数
       1> 创建/打开文件
HANDLE CreateFile(  LPCTSTR lpFileName,  DWORD dwDesiredAccess,  DWORD dwShareMode,  LPSECURITY_ATTRIBUTES lpSecurityAttributes,  DWORD dwCreationDisposition,  DWORD dwFlagsAndAttributes,  HANDLE hTemplateFile);       参数含义:
       lpFileName:创建/打开文件的文件名,需要包括其完整路径。
       dwDesiredAccess:指定文件的访问权限,如可读,可写。(详见表1)
GENERIC_READ
 可读
 
GENERIC_WRITE
 可写
 
GENERIC_WRITE | GENERIC_READ
 可读可写
 
0
 不可读不可写,只能获取文件属性
 
表1
       dwShareMode:在本进程创建或者打开一个文件后(未关闭之前),其他进程是否还可以具有访问该文件的权限,由此参数设定。(详见表2)
FILE_SHARE_WRITE
 其他进程打开文件时的访问权限为只写时,成功
 
FILE_SHARE_READ
 其他进程打开文件时的访问权限为只读时,成功
 
0
 在该文件的句柄被关闭之前,不能够被共享,也不能够被打开
 
表2
       lpSecurityAttributes:指定文件访问的安全属性,Windows CE下不支持该参数,因此设置为NULL。
       dwCreationDisposition:指定创建/打开文件的方式。(详见表3)
 
 
GREATE_NEW
 创建一个新文件,如果文件已经存在,则函数执行失败
 
GREATE_ALWAYS
 创建一个文件,如果文件已经存在,则覆盖此文件,并清空已经存在的属性
 
OPEN_EXISTING
 打开一个已经存在的文件,如果文件不存在,则函数执行失败
 
OPEN_ALWAYS
 打开一个已经存在的文件,如果文件不存在,则创建一个新文件
 
TRUNCATE_EXISTING
 打开一个已经存在的文件,并将其截断到0字节,如果文件不存在,则函数执行失败
 
                                                                表3
注:该参数设置为TRUNCATE_EXISTING,有一个必要的条件:dwDesiredAccess参数必须设置为GENERIC_WRITE。
dwFlagsAndAttributes:指定文件属性。(详见表4)
FILE_ATTRIBUTE_ARCHIVE
 存档
 
FILE_ATTRIBUTE_HIDDEN
 隐藏
 
FILE_ATTRIBUTE_NORMAL
 默认属性
 
FILE_ATTRIBUTE_READONLY
 只读
 
FILE_ATTRIBUTE_SYSTEM
 系统属性,表明该文件对系统操作很重要
 
                                                                表4
hTemplateFile:Windows CE中不支持,设为0。
       返回值:成功,返回文件句柄,失败则返回INVALID_HANDLE_VALUE。如果调用失败,通过GetLastError函数查看失败原因。
       2> 关闭文件
BOOL CloseHandle(  HANDLE hObject);       参数含义:
       hObject:文件的句柄,CreateFile函数的返回值。
       返回值:成功,返回非零值;失败,返回零值。
      3> 读取文件
BOOL ReadFile(  HANDLE hFile,  LPVOID lpBuffer,  DWORD nNumberOfBytesToRead,  LPDWORD lpNumberOfBytesRead,  LPOVERLAPPED lpOverlapped);       参数含义:
       hFile:文件句柄。
       lpBuffer:指定接收数据缓冲区。
       nNumberOfBytesToRead:要读取的字节数。
       lpNumberOfBytesRead:实际读取的字节数。
lpOverlapped:Windows CE不支持,设置为NULL。
返回值:成功返回TRUE,失败返回FALSE。
4> 写入文件
BOOL WriteFile(  HANDLE hFile,  LPCVOID lpBuffer,  DWORD nNumberOfBytesToWrite,  LPDWORD lpNumberOfBytesWritten,  LPOVERLAPPED lpOverlapped);参数含义:
hFile:文件句柄。
lpBuffer:指定写入数据缓冲区。
       nNumberOfBytesToRead:要写入文件的字节数。
       lpNumberOfBytesRead:实际写入文件的字节数。
lpOverlapped:Windows CE不支持,设置为NULL。
返回值:成功返回TRUE,失败返回FALSE。
       5> 文件指针的移动
       读写文件之前,可以通过指针的移动来设置读写文件的位置。
DWORD SetFilePointer(  HANDLE hFile,  LONG lDistanceToMove,  PLONG lpDistanceToMoveHigh,  DWORD dwMoveMethod);参数含义:
hFile:文件句柄。
lDistanceToMove:指定(有符号32位)偏移量。
lpDistanceToMoveHigh:指定一个辅助的32位偏移量,它在文件指针移动距离超出4G时开始使用。否则设置为NULL。
dwMoveMethod:(详见表5)
 
FILE_BEGIN
 从文件首部开始计算偏移量
 
FILE_CURRENT
 从文件当前位置开始计算偏移量
 
FILE_END
 从文件的末尾位置开始计算
 
表5
       返回值:为了更容易理解,这里引用MSDN原文并给出中文解释。
——————————————————————————————————
If the SetFilePointer function succeeds and lpDistanceToMoveHigh is NULL, the return value is the low order DWORD of the new file pointer.
If lpDistanceToMoveHigh is not NULL, the function returns the low order DWORD of the new file pointer, and puts the high order DWORD of the new file pointer into the LONG pointed to by that parameter.
If the function fails and lpDistanceToMoveHigh is NULL, the return value is INVALID_SET_FILE_POINTER. To get extended error information, call GetLastError.
If the function fails, and lpDistanceToMoveHigh is not NULL, the return value is INVALID_SET_FILE_POINTER. However, because INVALID_SET_FILE_POINTER is a valid value for the low order DWORD of the new file pointer, you must check GetLastError to determine whether or not an error occurred. If an error occurred, GetLastError returns a value different from NO_ERROR.
——————————————————————————————————
     注:假如函数执行成功,并且lpDistanceToMoveHigh参数设置为NULL,返回值为新的文件指针的低32位值。假如lpDistanceToMoveHigh参数不为NULL,函数返回新的文件指针的低32位数值,高32位数值装载进参数指向的变量。假如函数执行失败并且lpDistanceToMoveHigh参数为NULL,则返回INVALID_SET_FILE_POINTER,可以通过调用GetLastError函数来获取进一步的错误信息。假如函数执行失败并且lpDistanceToMoveHigh参数不为NULL,返回值仍为INVALID_SET_FILE_POINTER。但是,由于“INVALID_SET_FILE_POINTER”本身是一个新的文件指针双字节值的低位有效的值,所以必须通过调用GetLastError函数来查看是否有错误发生。如果发生了错误,GetLastError函数将返回错误信息(非NO_ERROR)。
 
       6> 获取文件信息
DWORD GetFileAttributes(  LPCTSTR lpFileName);       参数含义:
       lpFileName:文件名。
       返回值:函数执行成功返回DWORD类型的文件属性值(详见表6),如果失败则返回0xFFFFFFFF。
FILE_ATTRIBUTE_ARCHIVE
 此文件或目录具有存档属性,应用程序将根据此属性标识此文件或目录是否备份或删除
 
FILE_ATTRIBUTE_COMPRESSED
 此文件或者目录是压缩的。对于一个文件来说,文件中的内容是被压缩的。对于一个目录来说,它其中的文件或者子目录被新建时,默认是压缩的
 
FILE_ATTRIBUTE_DIRECTORY
 表明lpFileName参数所指定的是一个目录,而不是一个文件
 
FILE_ATTRIBUTE_ENCRYPTED
 文件或者目录是被加密的。对于一个文件来说,文件中的内容是被加密的。对于一个目录来说,它其中的文件或者子目录被新建时,默认加密
 
FILE_ATTRIBUTE_HIDDEN
 文件或目录是隐藏的
 
FILE_ATTRIBUTE_NORMAL
 正常属性
 
FILE_ATTRIBUTE_READONLY
 文件或者目录是只读的
 
FILE_ATTRIBUTE_SPARSE_FILE
 此文件是一个稀少文件
 
FILE_ATTRIBUTE_SYSTEM
 文件或者目录是系统的一部分或者专门被系统调用的
 
FILE_ATTRIBUTE_TEMPORARY
 文件被当做临时文件使用
 
FILE_ATTRIBUTE_ROMSTATICREF
 表示这个DLL模块被静态链接到ROM中别的模块。此DLL不能被别的位置具有相同文件名的模块所取代
 
FILE_ATTRIBUTE_ROMMODULE
 文件是ROM的一个可执行文件,该文件被格式化为可以加载以立刻执行。此文件不能够通过CreateFile函数打开
 
表6
      7> 设置文件属性
BOOL SetFileAttributes(  LPCTSTR lpFileName,  DWORD dwFileAttributes);       参数含义:
       lpFileName:文件名。
       dwFileAttributes:文件属性。
       返回值:成功返回非零值,失败返回零。
      8> 获取文件时间
       Windows CE的文件时间包括三种,分别是文件的创建时间,文件最后一次被访问的时间(包括读取,写入和执行)和文件最后一次被修改的时间。
BOOL GetFileTime(  HANDLE hFile,  LPFILETIME lpCreationTime,  LPFILETIME lpLastAccessTime,  LPFILETIME lpLastWriteTime);       参数含义:
       hFile:文件句柄。
       lpCreationTime:文件的创建时间。
       lpLastAccessTime:文件最后一次被访问的时间。
lpLastWriteTime:文件最后一次被修改的时间。
返回值:成功返回非零值,失败返回零。
9> 设置文件时间
BOOL SetFileTime(  HANDLE hFile,  const FILETIME* lpCreationTime,  const FILETIME* lpLastAccessTime,  const FILETIME* lpLastWriteTime);      参数含义:
       hFile:文件句柄。
       lpCreationTime:文件的创建时间。
       lpLastAccessTime:文件最后一次被访问的时间。
lpLastWriteTime:文件最后一次被修改的时间。
返回值:成功返回非零值,失败返回零。
      10> 获取文件大小
DWORD GetFileSize(  HANDLE hFile,  LPDWORD lpFileSizeHigh);      参数含义:
       hFile:文件句柄。
       lpFileSizeHigh:指定存储文件大小的高32位,如果不需要处理超过4GB大小的文件,设置为NULL。
       返回值:函数执行成功,返回表示文件大小的低32位数值。如果参数lpFileSizeHigh设置为NULL,函数的返回值是0xFFFFFFFF时,表示获取文件大小失败。如果参数lpFileSizeHigh未被设置为NULL,但是调用此函数后,lpFileSizeHigh的值为0xFFFFFFF,也表示函数执行失败。
       一般情况下很少会处理大于4GB的文件,因此lpFileSizeHigh参数大多被设置为NULL,函数返回值直接表示文件的大小。
 
二 MFC模板中封装的CFILE文件操作类
      1> 创建/打开文件
—————————————————————————————————
 
virtual BOOL Open(
   LPCTSTR lpszFileName,
   UINT nOpenFlags,
   CFileException* pError = NULL
);
—————————————————————————
     
 
2> 关闭文件
—————————————————————————
virtual void Close( );
—————————————————————————
      3> 读取文件
—————————————————————————
virtual UINT Read(
   void* lpBuf,
   UINT nCount
);
—————————————————————————
      4> 写入文件
—————————————————————————
virtual void Write(
   const void* lpBuf,
   UINT nCount
);
—————————————————————————
      5> 文件指针的移动
—————————————————————————
virtual ULONGLONG Seek(
   LONGLONG lOff,
   UINT nFrom
);
void SeekToBegin( );
ULONGLONG SeekToEnd( );
—————————————————————————
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VC++ 中使用内存映射文件处理大文件
[Win32]一个调试器的实现(五)调试符号
Windows API一日一练(56)SetEndOfFile和GetFileSizeEx函数 截断文件
Windows API一日一练(54)WriteFile和ReadFile函数
文件内存映射CreateFileMapping和GlobalAlloc内存分配
内存映射文件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服