C/C++关于文件的读写操作以及文件的打开和保存

通过近来的学习,总结一下关于文件的读写操作以及文件的打开和保存的方法。

一、文件的读写操作:

(1)C语言对文件的读写操作

在C语言中,对文件的读写操作是用FILE结构体和常用的对文件操作的函数实现的,下面总结一下C语言中对文件操作的常用函数:

fopen()   打开以文件名指定的文件

fwrite()  写文件

fread()  读文件

fseek()  移动文件的指针到新的位置通过该函数的参数设定的偏移量和初始位置

rewind()  移动文件的指针到文件流的开始位置,在通常情况下可用fseek()实现相同的功能,但二者有区别

ftell()  获得当前文件指针的位置,常用该函数获得文件的文件流的长度

fflush()  刷新缓冲区中的内容,当文件写入时直接将文件流的内容从缓冲区写入磁盘,当读取文件时直接将磁盘文件写入缓冲区,而不必等程序运行结束或关闭程序。

fclose()  关闭文件

memset()  在一段内存块中填充某个给定的值

示例代码如下:

/**********************************************************
 *                C语言实现文件写操作                                 *
 ***********************************************************/

FILE *pFile=fopen("CLanguage.txt","w");
fwrite("CLanguage",1,strlen("CLanguage"),pFile);
//fseek(pFile,0,SEEK_SET);
//fwrite("实现文件写操作",1,strlen("实现文件写操作"),pFile);
fclose(pFile);

 /**********************************************************
 *                C语言实现文件读操作                                 *
 ***********************************************************/

FILE *pFile=fopen("CLanguage.txt","r");
 //char ch[100];
 //memset(ch,0,100);
 //fread(ch,1,100,pFile);
 //MessageBox(ch);
 char* pBuf;
 int length;
 fseek(pFile,0,SEEK_END);
 length=ftell(pFile);
 pBuf=new char[length+1];
 //fseek(pFile,0,SEEK_SET);
 rewind(pFile);
 fread(pBuf,1,length,pFile);
 pBuf[length]=0;
 MessageBox(pBuf);
 fclose(pFile);

注意:在用C语言实现文件的读操作时,要注意文件的指针位置。而且还要注意文本文件和二进制文件的区别

(2)C++实现对文件的读写操作

用C++语言实现文件的读写操作,要用到ofstream类ifstream类,用该类的对象调用其成员函数Write()Read()实现文件的读写。

示例代码如下:

/**********************************************************
 *                C++实现文件写操作                                 *
 ***********************************************************/
 ofstream ofs("C++Language.txt");
 ofs.write("C++Language",strlen("C++Language"));
 ofs.close();

/**********************************************************
 *                C++实现文件读操作                                 *
 ***********************************************************/
 ifstream ifs("C++Language.txt");
 char ch[100];
 memset(ch,0,100);
 ifs.read(ch,100);
 MessageBox(ch);
 ifs.close();

注意:用C++实现文件的读写操作时,由于用到了ofstream类和ifstream类,所以要包含该类的头文件:

#include <fstream>
using namespace std;

(3)Win32 API函数实现文件的读写操作

用Win32 API函数实现文件的读写操作常用的函数如下:

CreateFile()

WriteFile()

ReadFile()

CloseHandle()

示例代码如下:

/**********************************************************
 *                Win32 API实现文件写操作                                 *
 ***********************************************************/
 HANDLE FileHandle;
 FileHandle=CreateFile("Win32 API.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,
  FILE_ATTRIBUTE_NORMAL,NULL);
 DWORD dwWrites;
 WriteFile(FileHandle,"Win32 API Function",strlen("Win32 API Function"),
  &dwWrites,NULL);
 CloseHandle(FileHandle);

/**********************************************************
 *                Win32 API实现文件读操作                                 *
 ***********************************************************/
 HANDLE FileHandle;
 FileHandle=CreateFile("Win32 API.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,NULL);
 DWORD dwReads;
 char ch[100];
 ReadFile(FileHandle,ch,100,&dwReads,NULL);
 ch[dwReads]=0;
 MessageBox(ch);
 CloseHandle(FileHandle);

(4)MFC实现文件的读写操作

用MFC实现文件的读写操作,要用到CFile类,该类的构造函数和成员函数会完成一系列的文件操作的相关工作。

示例代码如下:

**********************************************************
 *                MFC实现文件写操作                                 *
 ***********************************************************/
 CFile file("mfc.txt",CFile::modeCreate|CFile::modeWrite);
 file.Write("Hello!阿波",strlen("Hello!阿波"));
 file.Close();

/**********************************************************
 *                MFC实现文件读操作                                 *
 ***********************************************************/
 CFile file("mfc.txt",CFile::modeRead);
 DWORD filelenth;
 filelenth=file.GetLength();
 char* pBuf=new char[filelenth+1];
 pBuf[filelenth]=0;
 file.Read(pBuf,filelenth);
 MessageBox(pBuf);
 file.Close();
 delete pBuf;

二、文件的打开和保存

文件的打开和保存会弹出文件打开和保存对话框,所以要用到CFileDialog类实现文件的打开和保存。在CFielDialog类的运用中,经常用到OPENFILENAME结构体,在该结构体中,有相关的变量可以设置文件打开和保存对话框的相关设置工作(如:对话框标题的设置、默认文件扩展名的添加、过滤器的设置等)。

示例代码如下:

/**********************************************************
 *         文件对话框操作——保存文件                      *
 ***********************************************************/
 CFileDialog fileDlg(FALSE);
 fileDlg.m_ofn.lpstrTitle="我的文件保存对话框";//对话框标题
 fileDlg.m_ofn.lpstrFilter="TextFile(*.txt) *.txt AllFile(*.*) *.* ";//过滤器的设置
 fileDlg.m_ofn.lpstrDefExt="txt";//保存文件默认扩展名
 if(IDOK==fileDlg.DoModal())
 {
  CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
  file.Write("文件保存对话框",strlen("文件保存对话框"));
  file.Close();
 }

/**********************************************************
 *         文件对话框操作——打开文件                      *
 ***********************************************************/
 CFileDialog fileDlg(TRUE);
 fileDlg.m_ofn.lpstrTitle="我的文件打开对话框";
 fileDlg.m_ofn.lpstrFilter="TextFile(*.txt) *.txt AllFile(*.*) *.* ";
 
 if(IDOK==fileDlg.DoModal())
 {
  CFile file(fileDlg.GetFileName(),CFile::modeRead);
  DWORD fileLength;
  fileLength=file.GetLength();
  char* pBuf=new char[fileLength+1];
  pBuf[fileLength]=0;
  file.Read(pBuf,fileLength);
  MessageBox(pBuf);
  delete pBuf;
  file.Close();
 }