C/C++文件IO读写

好久没写博客了,工作上的事情很忙,差点把写博客的好习惯给丢了,好了切入正题吧。

近段时间被高级的东西迷花了眼,net ,java,python 什么的,忘记了自己在干嘛了,机械的Coding中,当然这里并不是说这些东西不好,只是在使用它们提供的便利时候,少了许多为什么。

C语言的文件读写涉及以下需要用到的库函数和数据结构:

FILE 一个与操作系统物理文件相关联的结构体,是读写文件的前提

fput(int c,FILE *f)  写入一个字符到磁盘

fputs(char *str,FILE *f) 写入一个字符数组到磁盘

fgetc(int c,FILE *f) 从磁盘读取一个字符

fgets(char *buf,FILE *f) 从磁盘读入一个字符数组

fopen(FILE *f,const char *mode) 打开一个物理文件与一个FILE的关联

fclose(FILE *f,const char *mode)关闭一个物理文件与一个FILE的关联

这里的mode是读写模式,它决定以什么模式来操作文件

“rt”      只读打开一个文本文件,只允许读数据
“wt”      只写打开或建立一个文本文件,只允许写数据
“at”      追加打开一个文本文件,并在文件末尾写数据
“rb”      只读打开一个二进制文件,只允许读数据
“wb”       只写打开或建立一个二进制文件,只允许写数据
“ab”       追加打开一个二进制文件,并在文件末尾写数据
“rt+”      读写打开一个文本文件,允许读和写
“wt+”      读写打开或建立一个文本文件,允许读写
“at+”      读写打开一个文本文件,允许读,或在文件末追加数据
“rb+”      读写打开一个二进制文件,允许读和写
“wb+”      读写打开或建立一个二进制文件,允许读和写
“ab+”      读写打开一个二进制文件,允许读,或在文件末追加数据

这里仅仅是基本的文件读写需要的函数和数据结构,并非所有的。

 

创建一个文本文件并写入数据

int main(int argc, _TCHAR* argv[])
{
    char filestr[256]="d:\\1.txt"; //创建的文件路径
    FILE *wfile; //文件结构体指针

    wfile=fopen(filestr,"w+"); //以写方式创建一个文本文件
    if(!wfile){
        printf("文件创建失败");
        return 1;
    }
    fputs("Hello,C",wfile); //写入一段字符到文件
    fclose(wfile); //关闭文件
	return 0;
}

读取文本文件数据

int main(int argc, _TCHAR* argv[])
{
    char filestr[256]="d:\\1.txt"; //待读取的文件路径
    FILE *rfile; //文件结构体指针

    rfile=fopen(filestr,"r"); //以读方式创建一个文本文件
    if(!rfile){
        printf("文件创建失败");
        return 1;
    }
    
    char buf[1024];//字符缓冲区

    while(!feof(rfile))
    {
        fgets(buf,1024,rfile);
        printf("%s\n",buf);
    }
    fclose(rfile); //关闭文件
    system("pause");//屏幕暂停
	return 0;
}



二进制文件的读写与文本文件基本一致

//二进制文件复制
int CopyFile(char *src,char *add)
{
    FILE *src_file=NULL;
    FILE *add_file=NULL;

    src_file=fopen(src,"rb"); //打开待复制的二进制文件
    add_file=fopen(add,"wb+"); //创建复制目标文件

    if(!src_file)
    {
        printf("待复制的二进制文件打开失败!");
        return 1;
    }
    if(!add_file)
    {
        printf("创建复制目标文件失败!");
        return 2;
    }

    char buf[1024]; //建立缓冲区
    while(!feof(src_file))
    {
        fread(buf,1024,1,src_file);
        fwrite(buf,1024,1,add_file);
    }
    
    fclose(src_file);
    fclose(add_file);

}


 用到了fread、fwrite函数忘记说了,百度一下 关键词:C fread fwrie就出来了

 

C++ 文件IO操作

 

//创建文本文件
void FileIO(string filepath)
{
    ofstream ofile(filepath.c_str(),fstream::out);
    if(!ofile)
    {
        cout<<"File Stream not valid"<<endl;
        return;
    }
    ofile<<"File System Read/Write";
    ofile.close();
    ofile.clear();
}

//读取文本文件 
void Readtxt(string filepath)
{
    //创建ifstream 对象
    ifstream ifile(filepath.c_str(),fstream::in);
    if(!ifile)
    {
        cout<<"Read File not valid"<<endl;
        return;
    }
    //缓冲区
    char p[256];
    while(!ifile.eof())
    {
        //获取一行数据
        ifile.getline(p,256);
        string line(p);
        cout<<line<<endl;
    }
    //关闭文件(类似C语言中的fclose)
    ifile.close();
    ifile.clear();
}
//复制二进制文件
void CopyFiles(string srcfile,string addfile)
{
    //创建ifstream对象读取文件
    ifstream ifile(srcfile.c_str(),fstream::binary|fstream::in);
    //创建ofstream对象写文件
    ofstream ofile(addfile.c_str(),fstream::out|fstream::binary);
    
    char buffer[1024]; //1k缓冲区
    long len=0;

    while(!ifile.eof())
    {
        len=ifile.read(buffer,1024).gcount();
        ofile.write(buffer,len);
    }
    ifile.close();
    ofile.close();
    ifile.clear();
    ofile.clear();
}


 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 一、ASCII 输出   为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取 代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓 冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含所有这两个 文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O 操作。如果你猜是"fstream," 恭喜你答对了! 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。   如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。 我们现在开始讲输出部 分,首先声明一个类对象。 ofstream fout;   这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。 fout.open("output.txt");   你也可以把文件名作为构造参数来打开一个文件. ofstream fout("output.txt");   这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文 件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操 作很像。 对不了解控制台输出"cout"的人, 这里有个例子。 int num = 150; char name[] = "John Doe"; fout << "Here is a number: " << num << " "; fout << "Now here is a string: " << name << " ";   现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你 不再操作这个文件的时候才调用它,它会自动保存文件。 回写缓冲区会在保持文件打开的情况下保存文 件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样: fout << flush; fout.close();    现在你用文本编辑器打开文件,内容看起来是这样:   Here is a number: 150 Now here is a string: John Doe   很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作,对 "<<" 和">>" 比较熟悉了, 因为你接下来还要用到他们。继续…   二、ASCII 输入   输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复杂的内容之前 , 先看一个文本:   12 GameDev 15.45 L This is really awesome!   为了打开这个文件,你必须创建一个in-stream对象,?像这样。 ifstream fin("input.txt");   现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在 "<<" (插入)?操作 符之后,是">>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值