分享
 
 
 

[CE编程]第7章 Files, Databases, and the Registry

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

其他OS(XP,WIN ME)都是在磁盘(软盘,硬盘)上存储的, Windows CE实现了一个唯一的基于RAM的文件系统,就是传说中的 object store.在实现中,对象存储更象一个数据库,而不是一个对磁盘分配的系统。 还好,对于程序员来说,win32 API掩盖了这一切。

数据库API是CE独有的,不要和SQL CE混淆了。

所以现在你不能看什么簇,卷......这些概念都没有了,尽管你看起来那些在ROM中的东西象是一个个文件。

还有,在其他WINDOWS系统中很重要的current directory概念在CE中也荡然无存。文件必须由全路径标示。

CE中也不支持deep application-level security available under Windows XP。在Win32 API中所有的security的参数全部传NULL。

FileSys.exe 由下列几个组件组成:

• ROM 文件系统

• 存储管理器

• 对象存储

对象存储是一个内存堆,由 FileSys.exe 控制。对象存储包含 RAM 系统注册表、RAM 文件系统和属性数据库。它们都是 FileSys.exe 模块的可选组件。RAM 文件系统和属性数据库是完全可选的,并且在某些系统中可以根本不存在。对每个 Windows CE 设备来说,以某些形式存在的注册表是必需的。直到 Windows CE 的 4.0 版本,它总是驻留在对象存储中。使用 Windows CE .NET,它可以作为文件存在于外部装入的文件系统(例如磁盘)中。随后,我们将了解注册表和文件系统是如何产生联系的。

基于 RAM 的文件系统通常连接到呈现给应用程序的统一文件系统的根。就是说,文件“\MyFile.txt”位于统一系统的根和 RAM 文件系统的根中。ROM 文件系统连接到统一文件系统中的“\Windows”文件夹。这意味着,ROM 中的所有 文件均可作为“\Windows”文件夹中的只读文件来访问。

摘自 《理解 Windows CE .NET 中的文件系统体系结构 》

http://www.microsoft.com/china/MSDN/library/windev/WindowsCE/art/embedded06172003_fig1.gif

WinCE文件系统:

创建和打开文件:

HANDLE CreateFile (LPCTSTR lpFileName, //所要创建的文件名

DWORD dwDesiredAccess, //GENERIC_WRITE允许写,GENERIC_READ读

DWORD dwShareMode, //其他进程对其的权限FILE_SHARE_READ,FILE_SHARE_WRITE

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //安全参数,NULL

DWORD dwCreationDistribution, //打开或者创建文件的方式

DWORD dwFlagsAndAttributes, //文件属性

HANDLE hTemplateFile); //在CE中被忽略,被设置为0.

读和写文件:

1.读函数:

BOOL ReadFile (HANDLE hFile, //打开文件的句柄

LPVOID lpBuffer, //读文件所要接受的数据的缓冲区

DWORD nNumberOfBytesToRead,

LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped); //CE中不支持overlapped file operations,所以为NULL

2.写函数:

BOOL WriteFile (HANDLE hFile, LPCVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORD lpNumberOfBytesWritten,

LPOVERLAPPED lpOverlapped);

移动文件指针:

//概念未理清

关闭文件:

BOOL CloseHandle (HANDLE hObject ); //关闭成功,返回TRUE,失败,调用GetLastError()返回失败原因

裁减文件:?

//概念未理清

获取文件信息:

DWORD GetFileAttributes (LPCTSTR lpFileName);

当然你也可以:

BOOL SetFileAttributes (LPCTSTR lpFileName, DWORD dwFileAttributes);

文件时间:

标准的Win32 API有3种文件时间:

文件创建时间,文件最后访问时间,文件最后修改时间。

BOOL GetFileTime (HANDLE hFile, LPFILETIME lpCreationTime,

LPFILETIME lpLastAccessTime,

LPFILETIME lpLastWriteTime);

这个函数用来获取文件时间。3个指针是指向要接受时间的FILETIME结构。如果你只对其中部分时间感兴趣,其他时间的指针就设置为NULL。

When the file times are queried for a file in the object store, Windows CE copies the last write time into all FILETIME structures. This goes against Win32 documentation, which states that any unsupported time fields should be set to 0. For the FAT file system used on storage cards, two times are maintained: the file creation time and the last write time. When GetFileTime is called on a file on a storage card, the file creation and last write times are returned and the last access time is set to 0.

BOOL FileTimeToSystemTime (const FILETIME *lpFileTime,

LPSYSTEMTIME lpSystemTime);

将一个FILETIME结构转变为一个SYSTEMTIME结构

Note:SYSTEMTIME结构里已经格式化了时间。

BOOL FileTimeToLocalFileTime (const FILETIME *lpFileTime,

LPFILETIME lpLocalFileTime);

同样,你也可以:

BOOL SetFileTime (HANDLE hFile, const FILETIME *lpCreationTime,

const FILETIME *lpLastAccessTime,

const FILETIME *lpLastWriteTime);

记住:文件时间必须是UTC时间,而不是本地时间。

不过以上仅仅只是在Win32下的,在CE中,修改时间的话,所有的3个时间参数都将被设置。如果有多个时间被设置的话,

那么最后一个设置的时间将设置3个参数;读也是一样的,CE将最后修改的时间放到所有的FILETIME结构中。

文件大小和其他信息:

这样获得一个文件的大小:

DWORD GetFileSize (HANDLE hFile, LPDWORD lpFileSizeHigh);

如果你不想文件大小超过4G的话,第2个参数设为NULL。

如果你还想多知道点的话,下面这个函数怎么样?

BOOL GetFileInformationByHandle (HANDLE hFile,

LPBY_HANDLE_FILE_INFORMATION lpFileInformation);

typedef struct _BY_HANDLE_FILE_INFORMATION {

DWORD dwFileAttributes;

FILETIME ftCreationTime;

FILETIME ftLastAccessTime;

FILETIME ftLastWriteTime;

DWORD dwVolumeSerialNumber;

DWORD nFileSizeHigh;

DWORD nFileSizeLow;

DWORD nNumberOfLinks;

DWORD nFileIndexHigh;

DWORD nFileIndexLow;

DWORD dwOID;

} BY_HANDLE_FILE_INFORMATION;

2004年11月2日21:03:26

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有