搜狐首页-新闻-体育-娱乐-财经-IT-汽车-房产-家居-女人-TV-ChinaRen-邮件-博客-BBS-搜狗 

数码天下 > 网狐学园-全中国人的电脑学习中心 > 程序开发-网狐学园 > 程序设计其他
解读VC++程序开发中的文件操作API和CFile类
时间:2006年03月06日09:41 我来说两句(0)  

 
来源:天极网】 【作者:RisingMine



25亿像素的大照片
P2P视频下载60%为情色
两大浏览器龙虎争霸
最佳创意产品NuLOOQ
迅雷存在严重DDOS漏洞
Windows的环保卫士
Vista和XP响应速度相近 用注册表砌安全墙
插件让IE向Maxthon看齐 把摄像头变3D扫描器
搜狐数字艺术博客大赛 低端显卡Aero亦流畅
搜狗拼音输入法 | 暴风影音 | WinRAR | FlashGet | 瑞星卡卡 | Firefox | Picasa
搜狗工具条 | ACDSee | Maxthon | Internet Explorer | Windows Live Messenger

  3.取得和设置文件的创建时间、最后访问时间、最后写时间

BOOL GetFileTime(
 HANDLE hFile, // 文件句柄
 LPFILETIME lpCreationTime, // 创建时间
 LPFILETIME lpLastAccessTime, // 最后访问时间
 LPFILETIME lpLastWriteTime // 最后写时间
);
BOOL SetFileTime(
 HANDLE hFile,
 CONST FILETIME *lpCreationTime,
 CONST FILETIME *lpLastAccessTime,
 CONST FILETIME *lpLastWriteTime
);
typedef struct _FILETIME {
 DWORD dwLowDateTime;
 DWORD dwHighDateTime;
} FILETIME;

  取得三个参数都是FILETIME结构,得到的都是UTC时间,可以通过API函数FileTimeToLocalFileTime()和FileTimeToSystemTime()将他们转换为本地时间和系统时间格式,也可以通过LocalFileTimeToFileTime 和SystemTimeToFileTime()转换回来,通过SetFileTime设置文件的创建时间、最后访问时间、最后写时间。由于使用的时候要先打开文件,而且取得的最后访问时间就是当前时间,没有多大意义,且比较麻烦,下面介绍CFile类中的静态方法。

static BOOL PASCAL GetStatus( LPCTSTR lpszFileName, CFileStatus& rStatus );
static void SetStatus( LPCTSTR lpszFileName, const CFileStatus& status );
throw( CFileException );

  返回的是一个CfileStatus对象,这个结构的具体的成员变量包括:

struct CFileStatus
{
 CTime m_ctime; // 文件创建时间
 CTime m_mtime; // 文件最近一次修改时间
 CTime m_atime; // 文件最近一次访问时间
 LONG m_size; // 文件大小
 BYTE m_attribute; // 文件属性
 BYTE _m_padding; // 没有实际含义,用来增加一个字节
 TCHAR m_szFullName[_MAX_PATH]; //绝对路径
 #ifdef _DEBUG
  //实现Dump虚拟函数,输出文件属性
  void Dump(CDumpContext& dc) const;
 #endif
};

  下面就举一个例子来实现:

CFileStatus status;
char *path = "D:\\VSS";
if(CFile::GetStatus( path, status ))
{
 CString cTime,mTime,aTime;
 cTime = status.m_ctime.Format("文件建立时间:%Y年%m月%d日 %H时%M分%S秒");
 mTime = status.m_mtime.Format("文件最近修改时间:%Y年%m月%d日 %H时%M分%S秒");
 aTime = status.m_atime.Format("文件最近访问时间:%Y年%m月%d日 %H时%M分%S秒");
 CString str;
 str = cTime + "\n" + mTime +"\n" + aTime ;
 MessageBox(str);

}

  4.取得和设置文件的属性

DWORD GetFileAttributes(
 LPCTSTR lpFileName //文件或文件夹路经
);
BOOL SetFileAttributes(
 LPCTSTR lpFileName, // 文件名
 DWORD dwFileAttributes // 要设置的属性
);

  取得的文件属性包括:FILE_ATTRIBUTE_ARCHIVE,FILE_ATTRIBUTE_HIDDEN,FILE_ATTRIBUTE_NORMAL,FILE_ATTRIBUTE_OFFLINE,FILE_ATTRIBUTE_READONLY,FILE_ATTRIBUTE_SYSTEM,FILE_ATTRIBUTE_TEMPORARY

  不能设置的文件属性包括有:FILE_ATTRIBUTE_COMPRESSED,FILE_ATTRIBUTE_DIRECTORY,FILE_ATTRIBUTE_ENCRYPTED,FILE_ATTRIBUTE_REPARSE_POINT,FILE_ATTRIBUTE_SPARSE_FILE,FILE_ATTRIBUTE_SYSTEM。

  CFileStatus中也定义了一组属性:

enum Attribute {
 normal,
 readOnly,
 hidden,
 system,
 volume,
 directory,
 archive
};

  可以通过if((status. m_attribute& readOnly) = =FILE_ATTRIBUTE_READONLY)来判断,这里利用另外的API来实现获得文件的详细信息:

HANDLE FindFirstFile(
 LPCTSTR lpFileName, //文件或文件夹路经r
 LPWIN32_FIND_DATA lpFindFileData
);
BOOL FindNextFile(
 HANDLE hFindFile,
 LPWIN32_FIND_DATA lpFindFileData
);
BOOL FindClose(HANDLE hFindFile );

  取得的是一个WIN32_FIND_DATA结构;

typedef struct _WIN32_FIND_DATA {
 DWORD dwFileAttributes; //文件属性
 FILETIME ftCreationTime; // 文件创建时间
 FILETIME ftLastAccessTime; // 文件最后一次访问时间
 FILETIME ftLastWriteTime; // 文件最后一次修改时间
 DWORD nFileSizeHigh; // 文件长度高32位
 DWORD nFileSizeLow; // 文件长度低32位
 DWORD dwReserved0; // 系统保留
 DWORD dwReserved1; // 系统保留
 TCHAR cFileName[ MAX_PATH ]; // 长文件名
 TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;

  也可以利用另外一个函数来取得文件的信息:

BOOL GetFileInformationByHandle(
HANDLE hFile, // 文件的句柄
LPBY_HANDLE_FILE_INFORMATION lpFileInformation
);

  函数填充的是BY_HANDLE_FILE_INFORMATION结构体:

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;
} BY_HANDLE_FILE_INFORMATION;

  下面就举一个例子来实现:

HANDLE handle;
WIN32_FIND_DATA find_data;
handle = :: FindFirstFile("D:\\VSS",&find_data);
FindClose(handle);
find_data.dwFileAttributes = find_data.dwFileAttributes|FILE_ATTRIBUTE_READONLY;
::SetFileAttributes("D:\\VSS",find_data.dwFileAttributes);

  在上面的介绍中,除了可以设置文件的属性之外,在操作的过程当中也可以取得文件的其他一些信息,可以根据具体的需要来实现。

[上一页][1][2][3][4][下一页]

(责任编辑:luwei)



共找到 73 个相关新闻.

我来说两句 全部跟贴(0条) 精华区(0条) 辩论区(0条)

用户:  匿名发表:  隐藏地址:


设为辩论话题      


精彩图片新闻


激情四溢沙滩宝贝


数码公社专栏

相关链接





搜狐短信 小灵通 性感丽人 言语传情
三星图铃专区
[周杰伦] 千里之外
[誓 言] 求佛
[王力宏] 大城小爱
[王心凌] 花的嫁纱
精品专题推荐
短信企业通秀百变功能
浪漫情怀一起漫步音乐
同城约会今夜告别寂寞
敢来挑战你的球技吗?
 精彩生活 

星座运势 每日财运
花边新闻 魔鬼辞典
情感测试 生活笑话


今日运程如何?财运、事业运、桃花运,给你详细道来!!!





菊花台
迷迭香
青青河边草
丁香花
原来你也在这里
爱如空气
不要再来伤害我

公社热图


·北美惊现若干神秘UFO/图
·范冰冰真空写真露点[图]
·传说中国内第一美女车模


频道精彩推荐

·2006年全国两会专题
·菲律宾再次暴发兵变
·德国世界杯 奥运会
·奥斯卡金像奖 馒头血案
·别克君越发布 购车指南
·AMD与英特尔的双核之争
·2006日内瓦车展
·NBA F1 刘翔 国足
·两会:三农、新农村建设
·人民币升值压力增大






不怕不怕
吉祥三宝
桃花朵朵开
千里之外
大城小爱
梁祝
迷糊娃娃可爱粉红卡通
四季美眉给你最想要的

news
搜狐分类 ·搜狐招商


创意就是这么简单
女星豪乳尺码大曝光
·现场抓拍明星着透视装
·芙蓉二代横空出世
·央视女主持辞职拍艳照
·徐若瑄15岁全裸写真曝光
·拍摄:娱乐圈性交易过程
·抓拍模特海滩宽衣解带
·外国女生流行拍的艺术照
·台湾十大波霸照片大比拼
·网络美女全裸人体摄影
·范冰冰终于还是脱了

推荐企业
2006年世界电信展 诺基亚 瑞星 联想 摩托罗拉 三星 清华紫光 金山 索尼爱立信 索尼
给编辑写信



设置首页 - 搜狗输入法 - 支付中心 - 搜狐招聘 - 广告服务 - 客服中心 - 联系方式 - 保护隐私权 - About SOHU - 公司介绍 - 全部新闻 - 全部博文
Copyright © 2018 Sohu.com Inc. All Rights Reserved. 搜狐公司 版权所有
搜狐不良信息举报邮箱:jubao@contact.sohu.com