程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言復制文件的兩種簡單的方法【從根本解決問題】,c語言

C語言復制文件的兩種簡單的方法【從根本解決問題】,c語言

編輯:關於C語言

C語言復制文件的兩種簡單的方法【從根本解決問題】,c語言


網上的方法大致有這樣幾種:

1、使用操作系統提供的復制文件的API

2、使用C語言本身提供的復制文件的函數

3、直接讀寫文件,從文件角度來操作,從而直接將一個文件復制

 

這裡我們使用的就是這第三種。

 

復制文件的思路大概是這樣的,如果是文本類型,則可直接使用字符讀寫的方式,依次讀寫到另一個文件中。但如果是非字符型文件那應該怎麼進行操作呢?我的方法是使用二進制形式打開,然後依次針對字節進行操作,依次從文件第一個字節讀寫至最後一個字節實現文件的復制,那麼由此可得,這種方法同樣可以用在遠程的操作上,即實現文件的遠程傳輸。

 

那麼問題來了,怎麼針對字節來進行讀取文件呢?這裡我總結了兩種辦法。

注意:本文針對的解決方案是依字節讀取,如果覺得效率低得話可以多字節讀取,但這樣就存在一個問題,怎麼保證正好和源文件大小相同而不是比源文件大。那麼推薦的做法是先獲取源文件的大小,然後直接讀取進行操作。

 

在C語言系統中void型指針占用一個字節,char型占用一個字節,正好滿足我們的要求,所以可以分別使用來完成我們需要的操作。

 

需要注意,這裡我們用到的概念是類型並不是限制了使用的數據類型,不是說char型只能用來存放char型變量,數據類型提供的是一系列針對特定類型的操作,這方便了我們的操作,但不能存在思維定式,一種數據類型提供的是一種可能性,比如char型變量,它給了我們2^8種可能性,如果我們需要表示16種可能的話,完全可以使用一個char型變量來存放,而不是使用一個int型變量,節省了系統開銷。但真實情況下,需要考慮到程序的易讀性問題,而不是考慮內存的問題,更何況內存已經越來越便宜,空間越來越大,CPU性能越來越好。

 

源碼如下:

 1 #include <stdio.h>
 2 
 3 int main(int argc, char* argv[])
 4 
 5 {
 6 
 7 FILE *op,*inp;
 8 
 9 op=fopen("a.png","rb");
10 
11 inp=fopen("b.png","wb");
12 
13 void *buf;
14 
15 char c;
16 
17 while(!feof(op))
18 
19 {
20 
21 //方法二
22 
23 fread(&buf,1,1,op);
24 
25 fwrite(&buf,1,1,inp);
26 
27  
28 
29 //方法二
30 
31 fread(&c,1,1,op);
32 
33 fwrite(&c,1,1,inp);
34 
35 }
36 
37 fclose(inp);
38 
39 fclose(op);
40 
41 printf("over");
42 
43 return 0;
44 
45 }
46 
47  

 

記錄下來,留待後查,同時方便他人。

謝謝支持!

可以聯系我進行交流。[email protected]

2016.1.30 

22:26

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved