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


 

 

 

 

 

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