讲到文件操作我们会联想到自己手动操作文件会涉及到哪些内容.很容易想到的是查看文件(文件夹)是否存在,创建,复制,删除,剪切文件(文件夹).另外就是设置文件的属性.

那MFC中一些操作文件的类也差不多是会涉及到你如上操作.

查看文件

查看文件你可能凭直观感觉想到用find , search这样的函数.猜的大概不错.MFC中有个类CFileFind,它有个函数FindFile可以来判断文件是否存在.

CFileFind用法

CFileFind fileFind;

CString strFileName;

strFileName = _T("D:\\test.txt");

if(fileFind.FindFile(strFileName) );

除了查看文件是否存在CFileFind类中还有许多其他函数可以得到文件的详细信息.比如

IsReadOnly查看是否只读

IsHidden是否隐藏

GetLastAccessTime 查看上次文件访问时间

GetLength查看文件大小(不过要注意的是调用了FindFile函数后还得再来个fileFind.FindNextFile(),然后再调用fileFind.GetLength()才不会出错)

另外还有个结构体叫CFileStatus,也可以实现类似的一些功能.

CFileStatus用法

struct CFileStatus{

CTime m_ctime; // creation date/time of file

CTime m_mtime; // last modification date/time of file

CTime m_atime; // last access date/time of file

ULONGLONG m_size; // logical size of file in bytes

BYTE m_attribute; // logical OR of CFile::Attribute enum values

BYTE _m_padding; // pad the structure to a WORD

TCHAR m_szFullName[_MAX_PATH]; // absolute path name

}

CFileStatu在CFile的函数GetStatus中会用到,该函数有两个版本

BOOL GetStatus(
CFileStatus&
rStatus
) const;
static BOOL GetStatus(
LPCTSTR
lpszFileName,
CFileStatus&
rStatus
);

其中一个是CFile的普通成员函数,一个是static类型的函数.也可以用该函数判断文件是否存在

CFile file;

CFileStatus fileStatus;

CString strFileName;

strFileName = _T("D:\\test.txt");

if(file.GetStatus(fileStatus))   //或者用CFile:GetStatus(strFileName, fileStatus)

//存在

else

//不存在

查看,创建目录

查看目录是否存在很简单

CString strDirPath = _T("D:\\Temp");

BOOL bExistDir = ::PathFileExists(strDirPath);

创建目录

CString strDirName = _T("D:\\Temp\\Dir");

::CreateDirectory(strDirName,NULL); //要保证Temp是存在的.

创建文件

CFile file;

CFileException exp;

CString strFileName = _T("D:\\temp\\arwen.txt");

//创建文件,如果已经存在文件则会覆盖之前的内容

BOOL bCreateFile = file.Open(strFileName,CFile::modeCreate,&exp);

如果创建失败你想知道详细信息的话可以通过exp.m_cause去获取, 可能的错误信息是

enum {none,  genericException,

fileNotFound,  badPath,

tooManyOpenFiles,   accessDenied,

invalidFile,      removeCurrentDir,

directoryFull,    badSeek,

hardIO,  sharingViolation,

lockViolation,    diskFull,  endOfFile

}

写文件

假如要往文件中写入些内容

CFile file;

CString strFileName = _T("D:\\temp\\arwen.txt");

CString strInfo = _T("hello,world\n");

int nSize = strInfo.GetLength();

if(file.Open(strFileName,CFile::modeReadWrite,&exp))

{

file.Write(strInfo.GetBuffer(0),nSize);

file.Flush();

file.Close();

}

不过CFile用起来还是不方便,有个继承自它的类CStdioFile,用起来就比较方便

CStdioFile file;

file.WriteString(strInfo);

读文件

CStdioFile file;

file.Open(strFileName,CFile::modeRead);

CString strText;

CString strTemp;

while(file.ReadString(strTemp))

{

strText += strTemp;

}

file.Close();

文件属性设置

假如你读或写文件时不让其他人操作该文件(有点像数据库中的上锁),咋整呢?

file.Open( strFileName, CFile::modeWrite | CFile:shareDenyRead)

CFile:shareDenyRead 就表示你操作时别人也不能读文件.

如果是可让别人读但不能写就是CFile::shareDenyWrite

另外我们经常碰到一些文件时只读的,或者是隐藏的.怎么在代码中设置呢

SetFileAttributes(strFileName, FILE_ATTRIBUTE_READONLY);  //设置文件为只读

FILE_ATTRIBUTE_HIDDEN就是表示隐藏

假如你要取消这些属性就这样

SetFileAttributes(strFileName, FILE_ATTRIBUTE_NORMAL);

设置属性还有另外一个方法

CFileStatus status;

CFile::GetStatus(strFileName, status);

status.m_attribute |= CFile::readOnly;

CFile::SetStatus(strFileName, status);

转:MFC文件操作的更多相关文章

  1. MFC文件操作

    文件操作:二进制文件和文本文件的区别.二进制文件将数据在内存中存在的模式原封不动的搬到文件中,而文本文件是将数据的asc码搬到文件中.首先做一个读写文件的菜单,在CxxView里响应1.C的方式:fw ...

  2. MFC 文件操作

    MFC中文件的建立 在操作系统中,文件是放在一定的目录下,在创建以及操作文件以前,我们要查看文件要保存的目录有没有存在,如果不存在要创建.这就要用到GetFileAttributes()和Create ...

  3. C++ MFC 文件操作(新建,删除,剪切,复制,读数据,写数据,重命名)

    源文件:http://pan.baidu.com/s/1ve0hV 这是运行mfc缺失的dll动态链接库:http://pan.baidu.com/s/17pGlT 哈哈,我也是初接触C++,基础的什 ...

  4. 文件操作总结:关于文本和二进制流(typeText&typeBinary)

    本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 总结: CFile,其自身是不提供缓冲区的(?但CFile又有一个Flush,这一点目 ...

  5. 文件操作(CRT、C++、WIN API、MFC)

    一.使用CRT函数文件操作 二.使用标准C++库 std::fstream std::string 1)std::string对象内部存储了一个C的字符串,以'\0'结尾的. 2)std::strin ...

  6. VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)

    上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用. CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作.这些 ...

  7. VS2010-MFC(MFC常用类:CFile文件操作类)

    转自:http://www.jizhuomi.com/software/234.html CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作 ...

  8. VC的文件操作

    各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的.本文将对Visua ...

  9. C++ 文件操作(CFile类)

    原文:文件操作(CFile),C吉羊 一.Visual C++编程文件操作 有如下方法可进行操作: (1)使用标准C运行库函数,包括fopen.fclose.fseek等. (2)使用Win16下的文 ...

随机推荐

  1. linux下服务器管理

    0.更新国内yum源,参考:http://blog.csdn.net/zhaoyue007101/article/details/8456188 1.创建用户.用户组: 新增用户组 groupadd ...

  2. 火狐解决 OCSP 回应包含过期信息的问题_firefox吧_百度贴吧

    火狐解决 OCSP 回应包含过期信息的问题_firefox吧_百度贴吧 火狐解决 OCSP 回应包含过期信息的问题

  3. java中的Package语句和import语句

    在实际项目中会有成百上千个类,我们把近似的类放在同一个包里面,比如把实体类放在实体类包里面   package 为解决类的 命名冲突问题而引入的机制. package语句作为Java源文件的第一条语句 ...

  4. Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)

    原文地址:http://blog.csdn.net/sttyytw/article/details/17005263 声明:本教程在參考了下面博文,并经过自己的摸索后实际操作得出,本教程系本人原创,因 ...

  5. HNC-局部联想脉络

    局部联想脉络 概念分为:抽象概念.具体概念 对抽象概念用 五元组 和 语义网络 表达 对具体概念用 挂靠展开近似 表达 五元组:动态.静态.属性.值.效应.(u,g,u,z,r),用于表达抽象概念的外 ...

  6. [转] IPC之管道、FIFO、socketpair

    管道和FIFO作为最初的UNIX IPC形式,现在已用得较少.SocketPair可作为全双工版本的管道,较为常用,这里简单做个笔记 管道 * 只用于有亲缘关系的进程间通信 * 单向,即半双工 (双向 ...

  7. sql 处理以字符隔开的字符串(类似split)

    sql 处理以字符隔开的字符串(类似split)的处理方法. CREATE PROCEDURE dbo.Vip_SendMails @userids varchar(MAX), ), ), @c va ...

  8. thinkphp3.2.3 成功对接支付宝接口

    一.首先下载支付宝官方接口,下载地址: https://b.alipay.com/order/productDetail.htm?productId=2012111200373124&tabI ...

  9. 2008年NOI全国竞赛 假面舞会

    /* 分三种情况 1 有环:找环长的gcd作为max gcd的超过2的最小因子作为min 2 树:所有最长链的和作为max 3为min (最长链≥3) 3 两条相交链:找出所有的这样的两条链的差 同1 ...

  10. codevs 1027 姓名与ID

    /* 二分图匹配 建图稍麻烦点 不过 有STL大法带我上天 说正经的 先假设都有关系 然后把确定的没有关系的删掉 这样跑出来的一定是完美匹配 至于确定的匹配嘛 删掉这一条 不再是完美匹配 然后记下排序 ...