使用CStdioFile操作文件

#C++ #CFile #Create #CStdioFile #file #mode #Read #Write

前阵子做毕业设计,需要用到一些对本地文件的操作,没有使用传统的CFile,用了CFile的继承类CStdioFile,感觉简易直接许多。下面简单介绍一下一些比较常用的文件操作:

打开文件

file.Open(sFileName, CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);  

打开文件主要需要传入两个参数,sFileName——文件名;文件打开模式。 几种比较常见的文件打开模式:

  • CFile::modeCreate 以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容;
  • CFile::modeNoTruncate 以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作;
  • CFile::modeWrite 以只写模式打开;
  • CFile::modeRead 以只读模式打开;
  • CFile::modeReadWrite 以读写模式打开。

读文件

file.ReadString(sLine);  

将文件逐行读出,写入到sLine字符串里。 如果需要读出文件所有内容,可以用下面的方法:

while(file.ReadString(sLine))  
{  
    sFileData += sLine + "\r\n";  
}  

这里用\r\n来为字符串加上换行。

写入文件

file.WriteString(sLine);  

这里很值得注意一下,如果文件的打开模式设置了CFile::modeNoTruncate,那么字符串将以追加的形式写入,并且是从文件指针现在所处位置写起。 比如:

CString sFileName("test.txt"), sLine("");  
CStdioFile file;  
// 创建文件"test.txt",写入"1234567890"  
file.Open(sFileName, CFile::modeCreate | CFile::modeWrite);  
file.WriteString("1234567890");  
file.Close();  
// 追写入"abc"  
file.Open(sFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite);  
file.WriteString("abc");  
file.Close();  
// 读出第一行字符串,并用消息框弹出  
file.Open(sFileName, CFile::modeRead);  
file.ReadString(sLine);  
file.Close();  

MessageBox(sLine);  

最终将弹出abc4567890 那么如果我们其实是想写入在文件末尾,即弹出1234567890abc,那该如何? 只要在file.WriteString("abc");前加入一句file.SeekToEnd();。这一句的作用在于将文件指针移动到文件末尾。

关闭文件

每个打开的文件都需要关闭,否则天知道会出什么事儿~

file.Close();