如何使用CFile打开一个文件

tyanfeng_00 2012-08-20 08:26:18
如何使用vc中MFC中的CFile打开一个txt文件,并且读取和写入数据!
...全文
358 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
whucv 2012-08-20
  • 打赏
  • 举报
回复
虽然上面的方法最为基本,但是它的使用繁琐,而且功能非常简单。我向你推荐的是使用CArchive,它的使用方法简单且功能十分强大。首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个 CArchive对象,你就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例。

//对文件进行写操作 
CString strTemp;

CFile mFile;
mFile.Open("d:\\dd\\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
CArchive ar(&mFile,CArchive::store);
ar<<ar.Close();
mFile.Close();

//对文件进行读操作
CFile mFile;
if(mFile.Open("d:\\dd\\try.TRY",CFile::modeRead)==0)
return;
CArchive ar(&mFile,CArchive::load);
ar>>strTemp;
ar.Close();
mFile.Close();
whucv 2012-08-20
  • 打赏
  • 举报
回复
//对文件进行读操作 
char sRead[2];
CFile mFile( _T("user.txt"), CFile::modeRead );
if(mFile.GetLength()<2)
return;
mFile.Read(sRead,2);
mFile.Close();

//对文件进行写操作
CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate);
mFile.Write(sRead,2);
mFile.Flush();
mFile.Close();
whucv 2012-08-20
  • 打赏
  • 举报
回复
CFile类
//创建/打开文件
CFile file;
file.Open (_T("test.txt"),CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
文件打开模式可组合使用,用“|”隔开,常用的有以下几种:
CFile::modeCreate:以新建方式打开,如果文件不存在,新建; 如果文件已存在,把该文件长度置零,即清除文件原有内容。
CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且 不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操 作。
CFile::modeReadWrite:以读写方式打开文件。
CFile::modeRead:只读。
CFile::modeWrite: 只写。
//写入数据
CString strValue = "Hello World!";
file.Write(strValue, strValue.GetLength() );
//追加数据
file.SeekToEnd(); //将指针移至文件末尾进行追加
file.Write(strValue, strValue.GetLength());
file.Close();

dickbarry 2012-08-20
  • 打赏
  • 举报
回复
char sRead[2];
CFile mFile(_T("C:\\Users\\Administrator\\Desktop\\user.txt"),CFile::modeRead);
if(mFile.GetLength()<2
return;
mFile.Read(sRead,2);
mFile.Close();
//文件写操作
//CFile mFile(_T("C:\\Users\\Administrator\\Desktop\\user.txt");
mFile.Write(sRead,2);
mFile.Flush ();
mFile.Close();


WIN7系统,administrator,user.txt放到桌面上


或者你的代码不要变,把user.txt放到工程目录下
tyanfeng_00 2012-08-20
  • 打赏
  • 举报
回复
引用 11 楼 的回复
那具体在
char sRead[2];
CFile mFile(L"user.txt",CFile::modeRead);
if(mFile.GetLength()<2
return;
mFile.Read(sRead,2);
mFile.Close();
//文件写操作
//CFile mFile(L"user.txt");
mFile.Write(sRead,2);
mFile.Flush ();
mFile.Close();
如何修改?还是怎么搞?还是不能明白.
dickbarry 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
"要在你工程目录下"不是随便建立一个user.txt在桌面就可以吗?
[/Quote]

不是...

呃,或者说也是。如果随便建一个的话,就把路径传给CFile构造函数的第一个参数
tyanfeng_00 2012-08-20
  • 打赏
  • 举报
回复
"要在你工程目录下"不是随便建立一个user.txt在桌面就可以吗?
dickbarry 2012-08-20
  • 打赏
  • 举报
回复
还是把L"user.txt" 改成_T("user.txt")

这里的CFile是只读,因此需要你自己先建立一个user.txt的文档,扩展名也必须相同,而且要在你工程目录下
dickbarry 2012-08-20
  • 打赏
  • 举报
回复
还是把L"user.txt" 改成_T("user.txt")

这里的CFile是只读,因此需要你自己先建立一个user.txt的文档,扩展名也必须相同,而且要在你工程目录下
tyanfeng_00 2012-08-20
  • 打赏
  • 举报
回复
引用 7 楼 的回复:
你工程目录下有没有自己建一个user.txt?
另外,你确定你的工程是unicode字符吧?

我在mfc,单文档下建立的,unicode什么意思?本人初学,不是很明白.
dickbarry 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5楼 的回复:
//读操作
char sRead[2];
CFile mFile(L"user.txt",CFile::modeRead);
if(mFile.GetLength()<2)
return;
mFile.Read(sRead,2);
mFile.Close();
//文件写操作
//CFile mFile(L"user.txt");
mFile.Write(……
[/Quote]

你工程目录下有没有自己建一个user.txt?
另外,你确定你的工程是unicode字符吧?
tyanfeng_00 2012-08-20
  • 打赏
  • 举报
回复
引用 5楼 的回复:
//读操作
char sRead[2];
CFile mFile(L"user.txt",CFile::modeRead);
if(mFile.GetLength()<2)
return;
mFile.Read(sRead,2);
mFile.Close();
//文件写操作
//CFile mFile(L"user.txt");
mFile.Write(sRead,2);
mFile.Flush ();
mFile.Close();
这是我现在写的,但是为什么显示没有找到user.txt
dickbarry 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
tet文件放置在随便哪个位置都可以吗?
[/Quote]

如果不加路径,则是exe的当前目录
tyanfeng_00 2012-08-20
  • 打赏
  • 举报
回复
tet文件放置在随便哪个位置都可以吗?
tyanfeng_00 2012-08-20
  • 打赏
  • 举报
回复
//读操作
char sRead[2];
CFile mFile(L"user.txt",CFile::modeRead);
if(mFile.GetLength()<2)
return;
mFile.Read(sRead,2);
mFile.Close();
//文件写操作
//CFile mFile(L"user.txt");
mFile.Write(sRead,2);
mFile.Flush ();
mFile.Close();
这是我现在写的,但是为什么显示没有找到user.txt
Eleven 2012-08-20
  • 打赏
  • 举报
回复
CFile::Open/Read/Write/Close()
具体请参考MSDN文档CFile类的用法,应该也有不少例子代码可以参考的
小马喝水 2012-08-20
  • 打赏
  • 举报
回复

CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);
cfile.Flush();


CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);
cfile.Flush();
cfile.SeekToBegin();
char pbufRead[100];
cfile.Read(pbufRead, sizeof(pbufRead));
ASSERT(0 == memcmp(pbufWrite, pbufRead, sizeof(pbufWrite)));

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧