迷你5207专属论坛

注册

 

发新话题 回复该主题

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

发表者
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
5#

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


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

原帖由 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
7#

原帖由 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
8#

谢谢版主的解释!
TOP
9#

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


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