C 檔案的複製

2021-08-04 06:32:34 字數 1605 閱讀 6615

使用c++標準程式庫的輸入輸出流(i/o stream)複製檔案,存在許多的方法,

方法一:逐個字元複製

#include < fstream >

std::ifstream input("in",ios::binary);

std::ofstream output("out",ios::binary);

char ch;

while (input.get(ch)) output << ch;

注意:如果使用input>>ch讀取字元,則必須先呼叫input.unsetf(ios::skipws)取消輸入流預設的跳過空白符的輸入格式,因為換行符是空白符的一種。(ben注:流失操作以空白字元'/0'為字串的分割,並忽略它們,直接操作會缺失這些空白字元)

方法二:逐行複製

#include < fstream >

#include < string >

std::ifstream input("in",ios::binary);

std::ofstream output("out",ios::binary);

std::string line;

while (getline(input,line)) output << line << "/n";

注意:這裡的**有乙個小小的缺陷,如果檔案不是純文字格式的檔案,或者文字檔案的最後沒有換行符,那麼會導致複製後的檔案末尾新增了乙個多餘的換行符。(ben注:可以使用.gcount ()來判斷是否到達檔案尾,到達則不新增多餘的'/n')

方法三:迭代器複製

#include < fstream >

#include < iterator >

#include < algorithm >

std::ifstream input("in",ios::binary);

std::ofstream output("out",ios::binary);

input.unsetf(ios::skipws);

copy(istream_iterator(input),istream_iterator(),ostream_iterator(output,""));

同樣這裡也有乙個小技巧,輸入流的格式預設為跳過空白字元,因此呼叫unsetf取消這個格式,才可保證正確的複製。

方法四:緩衝區複製

#include < fstream >

std::ifstream input("in",ios::binary);

std::ofstream output("out",ios::binary);

output << input.rdbuf();

這裡直接使用了輸入流的緩衝區,因此沒有引入額外的臨時物件。(ben注:不管哪種方式操作,最好都使用緩衝提高效率,比如,可以使用字串儲存檔案內容,再一次性寫入到新檔案,這樣可以減少對檔案的操作,因為對檔案儲存器的操作也就是i/o裝置相對於記憶體是極其緩慢的)

很顯然,上述四種方法中,最後一種方法最簡潔,由於直接操作輸入流的緩衝區,從執行效率上來說,也比其他方法有著略微的優勢(當然,由於作業系統可能提供了額外的基於裝置的檔案緩衝機制,也許你無法證實這一點)。因此,除非要對輸入內容進行處理,直接複製檔案推薦最後一種方法,既不容易出錯,又能獲得良好的效能。

C 複製檔案

這裡我將複製檔案操作封裝成乙個介面,具體函式可以去查閱msdn,相信你看過我這篇部落格後,基本上關於檔案的刪除,拷貝,移動,改名都能順利完成,因為他們用的是同乙個函式 我這個介面不需要傳具體的檔案名字,只需傳存放該檔案的目錄即可,當然你也可以通過該部落格改寫介面 先定義兩個返回值型別 define ...

C 批量複製檔案

正題 我是直接新建的乙個aspx並在後台 裡寫的,帖cs using system using system.data using system.configuration using system.collections using system.web using system.web.secu...

C 批量複製檔案

我是直接新建的乙個aspx並在後台 裡寫的,帖cs using system using system.data using system.configuration using system.collections using system.web using system.web.securit...