C\C++学习 公积金相关帖子汇总 魅族M8SDK学习系列不断更新中 Mini开发小组软件发布

[魅族M8] M8SDK学习之文件系统常用api

[ 3537 查看 / 8 回复 ]

Wince毕竟是windows的兄弟系统,大部分都是捡过来的,所以文件系统的api也是非常类似。而在使用c++开发时api不可避免,即然如此就放下心来了解一下。在以前的文章中也有提到过一些api,这一篇将列举一些文件系统中常使用的api
1、文件和目录管理api
通常在开发程序时需要进行文件的查找、目录的管理,在wince中提供了与pc上的windows同样的api。大体分类如下:

目录类
  BOOL  CreateDirectory(
 
LPCTSTR lpPathName,
 
LPSECURITY_ATTRIBUTES lpSecurityAttributes
  );
  这个api意思很明确就是创建目录,第一个参数是目录全名,后面的参数是目录的属性。
 
  BOOL  RemoveDirectory(
  LPCTSTR lpPathName
  );
  删除目录
 


文件读写类

  HANDLE  CreateFile(
 
LPCTSTR lpFileName,
 
DWORD dwDesiredAccess,
 
DWORD dwShareMode,
 
LPSECURITY_ATTRIBUTES lpSecurityAttributes, 
 
DWORD dwCreationDisposition,
 
DWORD dwFlagsAndAttributes,
 
HANDLE hTemplateFile
  );
  这个函数可用于创建/打开文件,此函数执行成功将返回文件的句柄,在大部分要对文件进行操作的函数都会使用到这个函数,因为要得到文件的句柄。具体的参数可以查看msdn,其中最后一个参数wince中不用搭理,整个0就行了。
 
  BOOL DeleteFile(
      LPCTSTR lpFileName
  );
  删除文件
 
  BOOL  CloseHandle(
 
HANDLE hObject
  );
  关闭文件句柄,调用CreateFile后必须使用这个函数来关闭句柄资源
 
  BOOL  CopyFile(
 
LPCTSTR lpExistingFileName,
 
LPCTSTR lpNewFileName,
 
BOOL bFailIfExists
  );
  复制一份文件,最后一个参数表明是否在文件重复时报错。
 
  BOOL MoveFile(
 
LPCTSTR lpExistingFileName,
 
LPCTSTR lpNewFileName
  );
  移动文件,相当于剪切。
 
  BOOL  DeleteAndRenameFile(
 
LPCWSTR lpszDestFile,
 
LPCWSTR lpszSourceFile
  );
  重命名文件,其实就是将一个文件复制到另一个位置,删除掉原先的文件
 
l
文件查找类

  HANDLE  FindFirstFile(
 
LPCTSTR lpFileName,
 
LPWIN32_FIND_DATA lpFindFileData
  );
  查找文件,如果需要在某个目录下面进行文件查找,则必须在第一个参数中加入此目录,第二个参数很重要,在查找到并返回句柄后,要知道返回的是什么东西就是必须使用这个参数来判断,比如,判断是一个目录还是一个文件就要参数dwFileAttributes来检查。
 
  BOOL  FindNextFile(
 
HANDLE hFindFile,
 
LPWIN32_FIND_DATA lpFindFileData
  );
  当使用过FindFirstFile后使用这个函数可以查找下一个资源,这个函数在遍历目录时非常有用。 
 
  BOOL  FindClose(
 
HANDLE hFindFile
  );
  打开了文件资源就必须关闭,记得要关闭。
 

2、文件系统属性api

  BOOL  GetDiskFreeSpaceEx(
 
LPCWSTR lpDirectoryName,
 
PULARGE_INTEGER  lpFreeBytesAvailableToCaller,
 
PULARGE_INTEGER lpTotalNumberOfBytes,
 
PULARGE_INTEGER lpTotalNumberOfFreeBytes
  );
  使用FindFirstFile打开了文件资源后就可以通过判断属性,比如在wince中并没有驱动器的概念,存储都是通过内置的对象存储器或者是存储卡设备等,使用FindFirstFile获取到文件属性后,判断是否为FILE_ATTRIBUTE_TEMPORARY就知道是否为存储设备了。即然知道了是存储设备,使用GetDiskFreeSpaceEx就可以得到存储设备的总空间大小和空闲大小。
  另外对于最老版本的wince还有另一个函数可用:GetStoreInformation
 
  DWORD  GetFileAttributes(
 
LPCTSTR lpFileName
  );
  获取文件属性,这个函数与前面的多个api都可以联合使用咯。
 
  BOOL  GetFileTime(
 
HANDLE hFile,
 
LPFILETIME lpCreationTime,
 
LPFILETIME lpLastAccessTime,
 
LPFILETIME lpLastWriteTime
  );
  获取文件日期时间,但郁闷的是在wince中只能返回最近一次写入时间(在书上看到的),而且在使用这个api获取时,三个参数返回值一样,所以用哪个都无所谓。
 
  BOOL  FileTimeToSystemTime(
 
const FILETIME* lpFileTime,
 
LPSYSTEMTIME lpSystemTime
  );
  获取了文件时间后需要转换成标准时间(UTC),这个api就干这活的
 
  BOOL  FileTimeToLocalFileTime(
 
const FILETIME* lpFileTime,
 
LPFILETIME lpLocalFileTime
  );
  文件时间转换为当前系统时间,这样就可以用当前系统设置的时区进行转换。
 
  DWORD  GetFileSize(
 
HANDLE hFile,
 
LPDWORD lpFileSizeHigh
  );
  获取文件大小咯
 



作者:5207
出处:http://www.mini188.com
本文版权归作者所有,欢迎转载请注明出处,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本主题由 皇帝 5207 于 2009-7-4 11:50:18 执行 主题分类 操作
分享 转发
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP

希望多多介绍api
比如我想找个调用别的程序(OP)的方法  没有帮助都不知道怎么找
TOP

原帖由 zjzj 于 2009-3-20 21:16:00 发表
希望多多介绍api
比如我想找个调用别的程序(OP)的方法  没有帮助都不知道怎么找


CreateProccess可以实现
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP

我想问一下,一般给你一份源代码,你从什么地方开始分析啊?掌握全局!
谢谢!!!
TOP

原帖由 fedora 于 2009-3-22 22:36:00 发表
我想问一下,一般给你一份源代码,你从什么地方开始分析啊?掌握全局!
谢谢!!!


看代码或者是程序一定要找到入口。
找到了入口后就要把握整个的模块划分,然后找自己感觉兴趣的点看。不要都看,除非程序非常小。
觉得真的有兴趣通读Linux的源代码,真的,除了自己不明白的代码还是重新写一个吧。
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP

原帖由 5207 于 2009-3-21 19:10:00 发表
原帖由 zjzj 于 2009-3-20 21:16:00 发表
希望多多介绍api
比如我想找个调用别的程序(OP)的方法  没有帮助都不知道怎么找


CreateProccess可以实现

谢谢  我看网上ShellExecuteEx函数名称:      ShellExecuteEx
系统要求:      Windows CE 1.0 and later.
头文件:        Shellapi.h.
链接库:        Coredll.lib.
函数功能:      在文件上执行一个操作。文件可以是可执行文件或者文档。
这是win ce的api,怎么操作能包括进去 使能使用函数呢。M8sdk是哪个头文件。


CreateProccess是这个吗
 

Declared in Winbase.h; include Windows.h.


 
 

Link to Kernel32.lib.


 
 

Requires Kernel32.dll.


 
TOP

原帖由 zjzj 于 2009-3-23 23:28:00 发表
原帖由 5207 于 2009-3-21 19:10:00 发表
原帖由 zjzj 于 2009-3-20 21:16:00 发表
希望多多介绍api
比如我想找个调用别的程序(OP)的方法  没有帮助都不知道怎么找


CreateProccess可以实现

谢谢  我看网上ShellExec


ShellExecuteEx只要引入 include "shellapi.h"
CreateProccess 需要 #include <windows.h>
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP

谢谢版主的解释!
TOP

原帖由 fedora 于 2009-3-25 18:12:00 发表
谢谢版主的解释! 


举手之劳,不用客气,多多交流
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP