现在的位置: 首页 > 综合 > 正文

C或C++文件操作大全

2013年10月19日 ⁄ 综合 ⁄ 共 4865字 ⁄ 字号 评论关闭

        文件的打开操作 fopen 打开一个文件
  
        文件的关闭操作 fclose 关闭一个文件
  
        文件的读写操作 fgetc 从文件中读取一个字符
                fputc 写一个字符到文件中去
                fgets 从文件中读取一个字符串
                fputs 写一个字符串到文件中去
                fprintf 往文件中写格式化数据
                fscanf 格式化读取文件中数据
                fread 以二进制形式读取文件中的数据
                fwrite 以二进制形式写数据到文件中去
                getw 以二进制形式读取一个整数
                putw 以二进制形式存贮一个整数
  
      文件状态检查函数 feof 文件结束
                ferror 文件读/写出错
                clearerr 清除文件错误标志
                ftell 了解文件指针的当前位置
  
        文件定位函数 rewind 反绕
                fseek 随机定位

C
写入文件
 FILE *pFile=fopen("1.txt","w+");
 FILE *文件指针=fopen("文件名","打开方式");//打开文件
 返回NULL有两种情况:不存在此文件(包括路径问题)、无法读取(比如权限不够)
 打开方式:
  "r"为了读取而打开,如果这个文件不存在,也不能够发现,那么这个fopen就调用失败了。
  "w"打开一个空的文件为写而打开,如果给定的文件存在,它的内容将会被销毁。
  "a"打开文件在文件的末尾写入数据,
  "r+"为了读和写而打开文件,但是这个文件必须存在。
  "w+"打开一个空的文件而读和写,但是这个文件可以不存在,如果不存在会创建这个文件,
  "a+"为了读取和添加而打开,
        "+"可读可写
 b为二进制方式:
 "rb"以二进制的方式【打开】文件,只允许【读】数据
 "wb"以二进制的方式【打开】文件,只允许【写】数据
 "rb+"以二进制的方式【打开】文件,允许【读写】数据
 "wb+"以二进制的方式【打开或建立】文件,允许【读写】数据
 "ab"以二进制的方式【打开】文件,只允许在文件末尾【写】数据
 "ab+"以二进制的方式打开文件,允许【读】数据,和在文件末尾【写】数据
 t文本方式组合:
 "rt"以文本的方式【打开】文件,只允许【读】数据
 "wt"以文本的方式【打开】文件,只允许【写】数据,打开的同时会【删除】文件内容
 "wt+"以文本的方式【打开或建立】文件,允许【读写】数据,打开的同时会【删除】文件内容
 "rt+"以文本的方式【打开】文件,允许【读写】数据
 "at"以文本的方式【打开】文件,只允许在文件末尾【写】数据
 "at+"以文本的方式【打开】文件,允许【读】数据,和在文件末尾【写】数据
 
写入数据
 fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile);
 fwrite("写入字符",每次写的个数,写几次,文件指针);//写入数据

读取数据
 fread(ch,1,100,pFile);//读取文件到ch
 fread(存放内存,每次读的个数,读几次,文件指针);//读取文件到ch
 
移动【位置指针】到指定的位置,位置指针:下一次写入或读取数据的位置。
 fseek(pFile,0,SEEK_SET);//把文件指针移动到文件开始处
 fseek(pFile,0,SEEK_END);//把文件指针移动到文件结尾处
 fseek(文件指针,偏移量,操作方式);//把文件指针移动到文件开始处,偏移量为从操作方式的开始位置+偏移量开始操作文件
 操作方式:
  SEEK_CUR 从文件指针当前位置
  SEEK_END 从文件的结尾开始
  SEEK_SET 从文件的开始处

获得当前位置指针值
 long len = ftell(pFile); //long ftell( FILE *pFile );

重置位置指针到开始处
 rewind(pFile);
 rewind(文件指针);//把位置指针移动到文件开始处
 
写入字符串:    向指定的文件写入一个字符串
 fputs(“abcd“,pFile);
 fputs(字符串,文件指针),其中字符串可以是字符串常量,也可以是字符数组名, 或指针 变量,
 
读取一个字符:     从指定的文件中读一个字符,读取一个字节的数据
 char ch;  
 ch=fgetc(pFile);  //其意义是从打开的文件fp中读取一个字符并送入ch中。
 字符变量=fgetc(文件指针);
    int fgetc(FILE *fp);  若读取成功则返回读取的字符,否则返回-1
 
写入一个字符:  把一个字符写入指定的文件中
 fputc('a',pFile);  //其意义是把字符a写入fp所指向的文件中。
 fputc(字符,文件指针);

 
计算文件长度
 fseek(pFile,0,SEEK_END);//把文件指针移动到文件末尾处
 int len=ftell(pFile);//得到文件当前的位置
 rewind(pFile);//把文件指针移动到文件开始处
 

刷新缓存
 fflush(pFile);
 fflush(文件指针);//立即刷新缓存,作用把数据立即写入文件
 
临时文件:
 FILE *pFile=tmpfile();
 //以"w+b"的模式生成一个临时文件,败返回NULL,在程序结束时,这个文件会被自动删除
 
生成一个唯一的文件名
 tmpnam(str1);//生成一个唯一的文件名,失败返回NULL,
 其原型为char *tmpnam(char *s); 参数s用来保存得到的文件名

关闭文件
 fclose(pFile);
 fclose(文件指针);//关闭文件,失败/成功返回EOF/0,原型是:int fclose(FILE *pFile);关闭用fopen()打开的文件
 关闭一个流,若成功,则返回0,否则返回-1(EOF==-1).注意每次对文件操作完之后需关闭流,否则可能会造成数据丢失。

删除文件
 int remove(const char*filename);
 删除文件,若删除成功,则返回0,否则返回非零值
 
文件重命名
 int rename(const char*oldname,const char*newname);
 将文件重命名,重命名成功则返回0,否则返回非零值。
 
检测当前位置指针是否到达文件末尾:
 int feof(FILE *fp);
 检测当前位置指针是否到达文件末尾,若到达文件末尾,则返回一个非零值,否则返回0。

检查一个文件是否存在
 #include <io.h>
 原型: int access(const char*filename, int amode);
 amode:
  0  检查文件的存在性,如果文件存在,返回0,不存在,返回-1。
  06 检查读写权限
  04 检查读权限
  02 检查写权限
  01 检查执行权限
  00 检查文件的存在性
  而这个就算这个文件没有读权限,也可以判断这个文件存在于否存在返回0,不存在返回-1

文件读/写出错
  函数原型: int ferror(FILE *fp)
 功能说明: 检查由fp指定的文件在读写时是否出错。
(3) 参数说明
   fp:文件指针。
(4) 返回值
   0:假值,表示无错误。
   1:真值,表示出错。

用记事本打开文件
 ShellExecute(NULL,"open",C:\\1.txt,NULL,NULL,SW_SHOW);
 //ShellExecute(NULL,"open",文件路径,NULL,NULL,SW_SHOW);
 
 
【函数篇——示范篇】

//计算有几行根据文件名
int youjihang(
     CString wjname //文件名
     )
{
 
 FILE *pFile;
 if (( pFile=fopen(wjname,"rb") ) == NULL)
 {
  AfxMessageBox(wjname+":打开或写入失败!!");
  exit(0); //退出程序
 } 
 
 // 计算文件长度
 fseek(pFile,0,SEEK_END);//把文件指针移动到文件末尾处
 int len=ftell(pFile);//得到文件当前的位置
 rewind(pFile);//把文件指针移动到文件开始处
 
 //读取文件全部内容到quan
 char *ch=new char[len];//定义字符
 memset(ch,0,len);//把字符数组ch初始化为0
 fread(ch,1,len,pFile);//读取文件到ch
 CString quan=ch;
 delete[]ch;
 
 //计算有几行
 int cou=0;
 char d1=0xd;
 char a1=0xa;
 for(int i=0;i<quan.GetLength();i++)
 {
  if ( quan[i]==d1  &&  quan[i+1]==a1      )
  {
   cou++;
  }
 }
 
 return cou+1;//文件结束符算一行
}

//【根据文件名删除文件】
bool deletewj(CString filename)
{
 int c=remove(filename);
 if(c==0)
 {
  //删除成功
   return true;
 }
 else
 {
  //删除失败
  return false;
 }
 
}

//【根据文件名,反回这个文件的长度】
int getlen(CString str)
{
 FILE *pFile0;
 if (( pFile0=fopen(str,"rb") ) == NULL)
 {
  AfxMessageBox(str+":打开或写入失败!!");
  exit(0); //退出程序
 }
 
 fseek(pFile0,0,SEEK_END);//把文件指针移动到文件末尾处
 int len=ftell(pFile0);//得到文件当前的位置
 fclose(pFile0);
 return len;
}
  调用方法:
  CString str0=_T("C:\\Documents and Settings\\Hacker\\桌面\\81.txt");
  int len=getlen(str0);

//【根据文件和数据,把数据写到创建新文件里】
void WriteDate(CString name,CString date)
{
 FILE *pFile0;
 if (( pFile0=fopen(name,"wb") ) == NULL)
 {
  AfxMessageBox(name+":打开或写入失败!!");
  exit(0); //退出程序
 }
 
 fputs(date,pFile0);
 fclose(pFile0);

}

//根据文件地址,把这个文件全部内容返回
CString GetDate(CString str)
{
 FILE *pFile12;
 if (( pFile12=fopen(str,"rb") ) == NULL)
 {
  AfxMessageBox(str+":打开或写入失败!!");
  exit(0); //退出程序
 } 
 fseek(pFile12,0,SEEK_END);//把文件指针移动到文件末尾处
 int c=ftell(pFile12);//得到文件当前的位置
 rewind(pFile12);
 char *ch=new char[c];//定义字符
 memset(ch,'0',c);//把字符数组ch初始化为0
 fread(ch,1,c,pFile12);//读取文件到ch
 fclose(pFile12);

 str =ch;
 str=str.Left(c);
 return str;
}

 

转载地址

抱歉!评论已关闭.