2012-07-24 81 views
0

所以我做了一個程序,用ifstream打開一個文本文件。現在我想讓它以二進制形式輸出這個文件。我試過ofstream和使用.write(),但當我做程序崩潰。當我在網上看到使用.write()時我正確地設置了它,但我沒有看到任何人與我一起工作。有人有解決這個問題嗎?另外,我不知道爲什麼'InputFile'和'OutputFile'都像這樣突出顯示藍色。如何將帶有數字的文本文件轉換爲二進制文件?

#include <iostream> 
#include <fstream> 
#include <string> 
#include <bitset> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    if (argc < 2) 
    { 
     cout << "Error 1"; 
     return 0; 
    } 
    else 
    { 
     int WIDTH, HEIGHT; 
     ifstream InputFile; 
     InputFile.open(argv[1], ios::in); 
     ofstream OutputFile; 
     OutputFile.open("OUTPUT.raw", ios::binary | ios::app); 
     cout << "Enter Width" << endl; 
     WIDTH = cin.get(); 
     HEIGHT = WIDTH; 
     for (int x = 0; x < WIDTH; x++) 
     { 
      for (int y = 0; y < HEIGHT; y++) 
      { 
       OutputFile.write((char*)InputFile.get(), sizeof(InputFile)); 
      } 
     } 
    } 
    //cout << bitset<8>(txt[i]); 
    return 0; 
}; 
+1

我們需要更多信息。你是如何設置的?它如何崩潰,在哪裏? – 2012-07-24 14:09:44

+0

也許,如果您顯示失敗的代碼,我們可以提供幫助。 – Steve 2012-07-24 14:09:50

+0

你用過'ios :: out |嗎? ios :: binary'標誌?向我們展示一些代碼。 – RedX 2012-07-24 14:09:56

回答

2
OutputFile.write((char*)InputFile.get(), sizeof(InputFile)); 

首先,istream::get()提取從流中的一個字符並返回其澆鑄到一個整數值。結果是一個臨時的,你將其轉換爲char指針!它編譯,因爲C風格的演員基本上告訴編譯器「shoosh,我知道我在做什麼!」,但它肯定會在運行時做奇怪的事情。您需要獲得某個對象的地址,然後在其中存儲要寫入的值,然後投射該地址。

第二件事sizeof(InputFile)返回管理文件流的類的ifstream大小。這與流的緩衝區中有多少數據沒有任何關係。

如果您在文本模式下打開流,則從中提取數據的正確方法是使用提取運算符(>>)。然後,它很簡單:

std::ifstream in_file("numbers.txt"); 
std::ofstream out_file("numbers.bin", std::ios::binary); 

int i; 

while (in_file >> i) 
    out_file.write(reinterpret_cast<char*>(&i), sizeof(int)); 

上面的代碼將這樣一個輸入文本文件的工作:-4 21 1990 5425342 -3432 0 100

+0

你到目前爲止距離最近,但問題是我的文件在數字中沒有任何空格。當我把一個文件放進去,就像你的文件一樣分裂了,但是當我把文件放在一個大號碼的時候,它會因爲某種原因而不起作用。 – dvds414 2012-07-24 14:45:16

+0

然後我會告訴你輸入文件,但它是很多字符放在這個網站上。這幾乎只是一個非常大的文件。 – dvds414 2012-07-24 14:49:42

+0

如果您想將「大數」表示爲一個整數,那麼問題就不重要了。你需要一個可以處理大量整數的庫。 – jrok 2012-07-24 15:00:50

0

你必須分析你的文本文件,以獲得int在文件中的每個字符串,然後創建一個新的文件,並寫入您的二進制數據與fputc()fwrite()功能。

相關問題