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

hTemplateFileWindows 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:实际读取的字节数。

lpOverlappedWindows CE不支持,设置为NULL

返回值:成功返回TRUE,失败返回FALSE

4> 写入文件

BOOL WriteFile(
  HANDLE hFile,
  LPCVOID lpBuffer,
  DWORD nNumberOfBytesToWrite,
  LPDWORD lpNumberOfBytesWritten,
  LPOVERLAPPED lpOverlapped
);

参数含义:

hFile:文件句柄。

lpBuffer:指定写入数据缓冲区。

       nNumberOfBytesToRead:要写入文件的字节数。

       lpNumberOfBytesRead:实际写入文件的字节数。

lpOverlappedWindows 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( );

—————————————————————————

     

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值