好久沒寫博客了,工作上的事情很忙,差點把寫博客的好習慣給丟了,好了切入正題吧。
近段時間被高級的東西迷花了眼,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();
}