转:MFC文件操作
讲到文件操作我们会联想到自己手动操作文件会涉及到哪些内容.很容易想到的是查看文件(文件夹)是否存在,创建,复制,删除,剪切文件(文件夹).另外就是设置文件的属性.
那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文件操作的更多相关文章
- MFC文件操作
文件操作:二进制文件和文本文件的区别.二进制文件将数据在内存中存在的模式原封不动的搬到文件中,而文本文件是将数据的asc码搬到文件中.首先做一个读写文件的菜单,在CxxView里响应1.C的方式:fw ...
- MFC 文件操作
MFC中文件的建立 在操作系统中,文件是放在一定的目录下,在创建以及操作文件以前,我们要查看文件要保存的目录有没有存在,如果不存在要创建.这就要用到GetFileAttributes()和Create ...
- C++ MFC 文件操作(新建,删除,剪切,复制,读数据,写数据,重命名)
源文件:http://pan.baidu.com/s/1ve0hV 这是运行mfc缺失的dll动态链接库:http://pan.baidu.com/s/17pGlT 哈哈,我也是初接触C++,基础的什 ...
- 文件操作总结:关于文本和二进制流(typeText&typeBinary)
本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 总结: CFile,其自身是不提供缓冲区的(?但CFile又有一个Flush,这一点目 ...
- 文件操作(CRT、C++、WIN API、MFC)
一.使用CRT函数文件操作 二.使用标准C++库 std::fstream std::string 1)std::string对象内部存储了一个C的字符串,以'\0'结尾的. 2)std::strin ...
- VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)
上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用. CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作.这些 ...
- VS2010-MFC(MFC常用类:CFile文件操作类)
转自:http://www.jizhuomi.com/software/234.html CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作 ...
- VC的文件操作
各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的.本文将对Visua ...
- C++ 文件操作(CFile类)
原文:文件操作(CFile),C吉羊 一.Visual C++编程文件操作 有如下方法可进行操作: (1)使用标准C运行库函数,包括fopen.fclose.fseek等. (2)使用Win16下的文 ...
随机推荐
- visual studio 调试grunt
原文地址: https://yoavniran.wordpress.com/2015/06/25/debug-grunt-tasks-in-visual-studio-2015/
- HDU2048(标准错排问题)
错排问题. 将错排方法数记为D(n). 1. 把第n个元素放在一个位置,比如k,有n-1种方法. 2. 编号为k的元素有两种放法. <1> 把它放到位置n.那么对于剩下的n-2个元素,就有 ...
- E - QS Network - zoj 1586(简单)
题意:在一个叫做QS的星系,他们使用一些特殊的通讯方式,两个人之间通讯需要使用一个网络适配器,但是一个网络适配器只能跟一个人联系,所有它连接几个人就需要及格适配器,而且每个人都有一些不同的偏好,喜欢的 ...
- js的简单模板解析
在编程中总是会遇见很多动态生成的东西,一般我们都是通过简单的html拼接起来的 function createHtml(name, phone, addr, email, imageSrc){ var ...
- java中的进制转换方法
java中进行二进制,八进制,十六进制,十进制间进行相互转换 关键字: java 进制转换 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer ...
- eclipse中新建maven项目
maven是个项目管理工具,集各种功能于一身,下面介绍maven web项目在eclipse种的配置,并于tomcat集成.配置成功后,可以跟一般的web项目一样调试. 一.准备条件 1.安装下载jd ...
- Apache Shiro 使用手冊 链接文件夹整理
1.Apache Shiro 使用手冊(一)Shiro架构介绍 2.Apache Shiro 使用手冊(二)Shiro 认证 3.Apache Shiro 使用手冊(三)Shiro 授权 4.Apac ...
- 关于scanf的几种处理方法
字符输入中,赋值顺序和缓存的联系 scanf是从标准输入缓冲区中读取输入的数据,假设连续输入两个%c格式的字符.而中间又要涉及回车,那么第二个字符将被赋予回车. 解决的方法: .清空输入缓冲区 第一个 ...
- 在SQL Server 中启用 FileStream
最近在研究在数据库中存储大数据文件,看到了FileStream 这个功能,记录下来以备后用 FileStream 一般在安装的时候默认是不启用的,如果你留意的话,在选择数据库文件路径那个窗口,有一个标 ...
- [转] Web性能压力测试工具之ApacheBench(ab)详解
PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...