2017-05-08 89 views
-1

如何正確地將數據從二進制文件寫入新的字符數組。 我知道這個問題在這裏被問了幾次,但我仍然無法弄清楚如何正確地做到這一點。如何正確地從二進制文件讀取數據到字符數組

這是我迄今..

struct Computer_Details { 

     char computer_type[99]; 
     int release_year; 
     float price; 

    }; 


    Computer_Details pc_details; 

     cout << "Enter Computer Type: "; 
     cin.getline(pc_details.computer_type, 255); 
     cout << "Enter Computer Release Date: "; 
     cin >> pc_details.release_year; 
     cout << "Enter Computer Price: "; 
     cin >> pc_details.price; 
     cout << "\n\n"; 

     //Create File 
     ofstream file; 
     file.open("PC_Database.data", ios::binary | ios::app); 

     if (!file) cout << "Couldn't open file\n"; 
     else { 
     file.write((char*)&pc_details, sizeof(Computer_Details)); 
     file.close(); 
     } 


     ifstream readFile; 
     readFile.open("PC_Database.data", ios::binary); 
     if (!readFile) cout << "Couldn't Open File\n"; 
     else { 
     readFile.seekg(0, ios::end); 
     int fileSize = readFile.tellg(); 
     int pcCount = fileSize/sizeof(Computer_Details); 

     readFile.seekg(0, ios::beg); 
     Computer_Details *pc_details = new Computer_Details[pcCount]; 
     readFile.read((char*)pc_details, pcCount * sizeof(Computer_Details)); 

     char *buff = new char[299]; 

     for (int i = 0; i < pcCount; i++) 
     { 
      //write to buff char 
     } 
     readFile.close(); 
    } 
+0

你可以使用['strcpy'](http://en.cppreference.com/w/cpp/string/byte/strcpy)。 –

+2

可能重複[讀取二進制文件到char數組在c + +](http://stackoverflow.com/questions/33935567/reading-binary-file-into-char-array-in-c) – didiz

+2

這個答案沒有幫助 – Andrew

回答

0

也許問題是你的結構尺寸, 檢查尺寸結構和比較,這個結構的大小:

struct Computer_Details { 
     char computer_type[100]; 
     int release_year; 
     float price; 
    }; 

同樣的問題是,當你試圖讀取/寫入結構哪些contai ns在兩個其他類型(如int)之間的bool變量。

試試這個:

readFile.read((char*)pc_details->computer_type, sizeof(Computer_Details::computer_type)); 
readFile.read((char*)pc_details->release_year, sizeof(Computer_Details::release_year)); 
readFile.read((char*)pc_details->price, sizeof(Computer_Details::price)); 

編輯:看的例子在此評論:https://stackoverflow.com/a/119128/7981164

0

嘗試

std::ifstream input(szFileName, std::ios::binary); 
data = std::vector<char>(std::istreambuf_iterator<char>(input), 
    (std::istreambuf_iterator<char>())); 
char* charArray = &data[0]; 
size_t arraySize = data.size(); 
+2

他們爲什麼要這樣做?解釋你做了什麼,爲什麼。 – user4581301

+0

'數據'向量的緩衝區是需要的字符數組。它的構造函數的參數是兩個迭代器。第二個構造函數是默認的,它被視爲'end'迭代器。 – Oliort

0

我的猜測是,你要推pc_details到BUFF,所以你可以地方發送和重建數據。

如果是這樣的話,你可以這樣做:

for(int i=0; i < pcCount; i++) 
{ 
    memcpy(buff, (char*)pc_details, sizeof(computer_details)); 
    buff += sizeof(computer_details); 
    pc_details++; 
} 

但是,這樣做時,必須注意對齊並提供相應的 填充。而你的代碼應該檢查你的數組邊界。

相關問題