unix 檔案複製

2021-05-31 21:51:40 字數 1644 閱讀 8162

++呼叫系統:

#include

int main()

方法一:逐個字元複製

#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裝置相對於記憶體是極其緩慢的)

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

UNIX 建立 複製 移動 刪除 檔案或目錄

touch 建立檔案 touch file1,如果檔案沒有存在,則會建立,如果此檔案已經存在則會更新檔案的修改日期.其實建立檔案還有其它方式比如用復位向 echo content tmp file1,什麼是復位向,我們在shell程式設計欄目會講到 mkdir 建立目錄 mkdir dir1 這些指...

UNIX硬鏈結,軟鏈結 符號鏈結 ,檔案複製

一.首先在區別前得搞清楚unix檔案系統的基本結構 1 unix檔案系統 管理計算機硬體的軟體,詳情參見以下 2 基本結構 即檔案系統是如何管理資料的,也就是資料結構的型別,此處所講的是inode資料結構。3 inode資料結構 摘自鳥哥私房菜基礎學習篇第三版p198 super block 超級塊...

unix 檔案操作

1.touch filename 修改檔案的最後更新時間,如果檔案不存在的話則會建立檔案 2.echo hello filename 往filename裡寫入hello,如果filename 裡原來有內容將會被覆蓋 3.用 往檔案裡寫內容 覆蓋原始內容 用 從檔案裡讀出內容寫入到標準輸入流中 ls ...