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


 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章