2014-09-04 272 views
0

麻煩我寫了一個非常複雜的程序,這是目前竊聽了一個最後一件事: 這是我做的:C++從文件中讀取到緩存和寫回文件

我打開一個輸入文件。我將輸入文件char(char)讀入緩衝區。 然後我從緩衝區寫入輸出文件。

文件打開並讀取後 - 緩衝區中的char數組看起來與文件完全一樣。 輸入文件包含任何可能的符號。事實上 - 如果輸入文件是.jpg圖像,我應該能夠(在將擴展名更改爲.dat之後)將其讀入我的緩衝區,將其寫入輸出.dat文件,然後將擴展名更改回。 JPG,看到原始圖像。

我對一個簡單的2KB大型.txt文件(製作了一個.txt文件,將擴展名改爲.dat並運行我的程序)進行了測試。 如果輸入文件只包含簡單字符(比如說,一串數字1234215 ...) - 輸出文件是相同的(其大小也是2KB)。

如果輸入文件是由簡單字符組成,並且有新行(如果我已經按下ENTER,我認爲這是ACSII代碼13的字符,但我懷疑其他符號也會導致這種情況) - 文件是正確讀取到我的緩衝區(它的所有2048個字符,因爲它的大小是2KB,與文件中的相同,即使是ENTERS也是如此),但是在我將它寫回輸出文件後,輸出文件看起來 ,它似乎有相同數量的字符(沒有東西丟失,沒有額外的東西),但它的大小更大(例如 - 如果輸入是2KB,輸出是2.33KB)。

這應該發生 - 我懷疑有腐敗的地方,但我無法檢測到它,我不知道在哪裏看。

這是我寫的文件:

f=fopen("izlaz.dat","w"); 
file1 = FS::open(filename1, 'r'); 
long cnt = 0; 
while(1) { 
    if(file1->eof()==0) { 
     char rb[1]; 
     file1->read(1,rb); 
     fwrite(rb,1,1,f); 
     cnt++; 
    } 
    else { 
     std::cout << "cnt = " << cnt << std::endl; 
     fclose(f); 
     break; 
    } 
} 

file1->閱讀(1,RB)讀1噸焦炭

寫入或讀取到我的緩衝區,這是基本字符時,RB數組,我使用 char輸入;緩衝區[pos] =輸入; //寫入緩衝區 char output = buffer [pos]; //從緩衝器讀

伊夫還試圖從炭輸入到memcpy的於緩衝液[POS]和從緩衝液[POS]到char輸出但對腐敗沒有影響(它仍然損壞)

對不起對於文字牆 - 我希望有人能幫忙。我一直在嘗試我自己的3天:S

謝謝!在二進制模式("wb"

回答

0

打開文件:

f=fopen("izlaz.dat","wb"); 

Documentation:

文件存取模式標誌 「B」 可以任選地被指定爲打開一個文件in binary mode。此標誌對POSIX系統沒有影響,但在Windows上,例如,它禁用'\ n'和'\ x1A'的特殊處理。