Linux中進行單文件內容的復制


文件內容復制的常規方法:

  • 開辟一段空間,不斷讀取文件的內容並寫入另一文件當中,這種方法好在安全,一般在類型允許的最大范圍內是安全的,缺點就是復制內容的時間長
  • 一次性復制文件的內容,這種方法必須首先獲取當前被復制的文件內容的大小,然后一次性開辟與文件內容大小相同的內存空間,通常為了安全,都必須讓大小加1

讀取文件內容的步驟

  • 打開被復制文件(open/fopen)
  • 讀取文件內容(read/fread)--->當使用系統IO(open這一類)的時候可以直接讀取內容,但當使用標准IO(fopen這一類)的時候,必須進行下一步
  • 標准IO讀取文件內容的時候,必須先獲取到文件內容的大小,通常使用fseek和ftell來獲取,系統IO則不用
  • 寫入另一份文件中進行保存(write/fwrite)
  • 關閉打開的文件

具體的操作(考慮到移植性,本文章使用標准IO進行操作)

  • 使用fopen打開被復制的文件和創建一個保存的文件,並判斷是否打開或創建成功
  • 使用fseek和ftell來獲取當前復制文件的內容大小fileSize;
  • 開辟一個內存空間,建議使用動態開辟的方法,比如mallco,calloc,new等
  • 使用fread讀取被復制文件的內容,使用fwrite寫進到保存文件中
  • 使用fclose關閉上述的兩個文件

代碼顯示

 1 #include <stdio.h>
 2 
 3 int main(int argc,char *argv)  4 {  5     //以只讀的方式打開被復制的文件
 6     FILE *srcFd = fopen("./source.txt","r");  7     if(NULL == srcFd)  8  {  9         printf("open source file failed\n"); 10         return -1; 11  } 12 
13     //以讀寫的方式創建一個不存在的文件
14     FILE *dstFd = fopen("./save.txt","w+"); 15     if(NULL == dstFd) 16  { 17         printf("open save file failed\n"); 18         return -1; 19  } 20 
21     //進行獲取文件大小的操作
22     fseek(srcFd,0,SEEK_END);       //將光標移動到文件末尾
23     long fileSize = ftell(srcFd);  //獲取文件的大小
24     fseek(srcFd,0,SEEK_SET);       //將光標恢復到文件的開頭 25 
26     //開辟一個新空間(動態開辟)
27     char *dataBuf = (char *)calloc(1,fileSize+1); 28     if(NULL == dataBuf) 29  { 30         printf("calloc a memory failed\n"); 31         return -1; 32  } 33 
34     //讀取文件的內容
35     long retSize = fread(dataBuf,1,fileSize,srcFd); 36     if(retSize != fileSize) 37  { 38         printf("read file context failed\n"); 39         return -1; 40  } 41 
42     //寫入保存文件中
43     retSize = fwrite(dataBuf,1,fileSize,dstFd); 44     if(retSize != fileSize) 45  { 46         printf("write context in file failed\n"); 47         return -1; 48  } 49 
50     //關閉文件和釋放內存空間
51  fclose(srcFd); 52  fclose(dstFd); 53 
54     free(dataBuf); 55 
56     return 0; 57 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM