如何使用CFile打开一个文件

时间:2022-11-01 15:59:53
如何使用vc中MFC中的CFile打开一个txt文件,并且读取和写入数据!

17 个解决方案

#1



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)));

#2


CFile::Open/Read/Write/Close()
具体请参考MSDN文档CFile类的用法,应该也有不少例子代码可以参考的

#3


//读操作
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

#4


tet文件放置在随便哪个位置都可以吗?

#5


引用 4 楼  的回复:
tet文件放置在随便哪个位置都可以吗?


如果不加路径,则是exe的当前目录

#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(sRead,2);
mFile.Flush ();
mFile.Close();
这是我现在写的,但是为什么显示没有找到user.txt 

#7


引用 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(……


你工程目录下有没有自己建一个user.txt?
另外,你确定你的工程是unicode字符吧?

#8


引用 7 楼 的回复:
你工程目录下有没有自己建一个user.txt?
另外,你确定你的工程是unicode字符吧?

我在mfc,单文档下建立的,unicode什么意思?本人初学,不是很明白.

#9


还是把L"user.txt" 改成_T("user.txt")

这里的CFile是只读,因此需要你自己先建立一个user.txt的文档,扩展名也必须相同,而且要在你工程目录下

#10


还是把L"user.txt" 改成_T("user.txt")

这里的CFile是只读,因此需要你自己先建立一个user.txt的文档,扩展名也必须相同,而且要在你工程目录下

#11


"要在你工程目录下"不是随便建立一个user.txt在桌面就可以吗?

#12


引用 11 楼  的回复:
"要在你工程目录下"不是随便建立一个user.txt在桌面就可以吗?


不是...

呃,或者说也是。如果随便建一个的话,就把路径传给CFile构造函数的第一个参数

#13


引用 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();
如何修改?还是怎么搞?还是不能明白.

#14


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放到工程目录下

#15


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();

#16


//对文件进行读操作 
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(); 

#17


虽然上面的方法最为基本,但是它的使用繁琐,而且功能非常简单。我向你推荐的是使用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(); 

#1



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)));

#2


CFile::Open/Read/Write/Close()
具体请参考MSDN文档CFile类的用法,应该也有不少例子代码可以参考的

#3


//读操作
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

#4


tet文件放置在随便哪个位置都可以吗?

#5


引用 4 楼  的回复:
tet文件放置在随便哪个位置都可以吗?


如果不加路径,则是exe的当前目录

#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(sRead,2);
mFile.Flush ();
mFile.Close();
这是我现在写的,但是为什么显示没有找到user.txt 

#7


引用 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(……


你工程目录下有没有自己建一个user.txt?
另外,你确定你的工程是unicode字符吧?

#8


引用 7 楼 的回复:
你工程目录下有没有自己建一个user.txt?
另外,你确定你的工程是unicode字符吧?

我在mfc,单文档下建立的,unicode什么意思?本人初学,不是很明白.

#9


还是把L"user.txt" 改成_T("user.txt")

这里的CFile是只读,因此需要你自己先建立一个user.txt的文档,扩展名也必须相同,而且要在你工程目录下

#10


还是把L"user.txt" 改成_T("user.txt")

这里的CFile是只读,因此需要你自己先建立一个user.txt的文档,扩展名也必须相同,而且要在你工程目录下

#11


"要在你工程目录下"不是随便建立一个user.txt在桌面就可以吗?

#12


引用 11 楼  的回复:
"要在你工程目录下"不是随便建立一个user.txt在桌面就可以吗?


不是...

呃,或者说也是。如果随便建一个的话,就把路径传给CFile构造函数的第一个参数

#13


引用 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();
如何修改?还是怎么搞?还是不能明白.

#14


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放到工程目录下

#15


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();

#16


//对文件进行读操作 
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(); 

#17


虽然上面的方法最为基本,但是它的使用繁琐,而且功能非常简单。我向你推荐的是使用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();