我需要製作一個包含「name」的文件,該文件是一個char-和「data」的字符串數組,它是字節數組 - 在C++中的字符數組 - 但第一個我面臨的問題是如何將「名稱」與「數據」分開?換行符可以在這種情況下工作(假設名稱中沒有「\ n」),但在「數據」部分中可能有特殊字符,因此無法知道它何時結束,因此我將在具有「數據」大小的數據之前的文件中的int值! 我試着用代碼來做到這一點如下:在C++中讀取和寫入二進制文件
if((fp = fopen("file.bin","wb")) == NULL)
{
return false;
}
char buffer[] = "first data\n";
fwrite(buffer ,1,sizeof(buffer),fp);
int number[1];
number[0]=10;
fwrite(number ,1,1, fp);
char data[] = "1234567890";
fwrite(data , 1, number[0], fp);
fclose(fp);
,但我不知道是否「INT」部分是正確的,所以我嘗試了許多其他的代碼包括這一個:
char buffer[] = "first data\n";
fwrite(buffer ,1,sizeof(buffer),fp);
int size=10;
fwrite(&size ,sizeof size,1, fp);
char data[] = "1234567890";
fwrite(data , 1, number[0], fp);
當我打開它而不是看到一個整數時,我在文件中看到4個「NULL」字符。這是正常的嗎? 我面臨的另一個問題是再次從文件中讀取!我嘗試閱讀的代碼根本沒有工作:(我嘗試使用「fread」,但我不確定是否應該使用「fseek」,或者只是讀取其後的其他字符。
我想用一個類爲以下內容,然後寫入和讀取回來的:
class Sign
{
public:
char* name;
int size;
char* data;
};
但是這不是在C一件容易的事情++!
我也試過如下:
void saveData(char* filename) {
fstream filestr;
int n;
n=10;
char* data= "1234567890";
filestr.open (filename, fstream::out | fstream::binary);
for (int j = 0; j<5 ; j++)
{
filestr << n;
for (int i = 0; i < n; i++) {
filestr << data[i];
}
}
filestr.close();
}
void readData(char* filename) {
fstream filestr;
int n =0;
filestr.open (filename, fstream::in | fstream::binary);
int m =0;
//while(!filestr.eof())
while(m<5)
{
filestr >> n;
char *data = new char[n];
for (int i = 0; i < n; i++) {
filestr >> data[i];
}
printf("data is %s\n",data);
m++;
}
filestr.close();
}
但是閱讀也沒有工作。
在閱讀我越來越奇怪的字符。
到目前爲止,對我的作品的代碼是這樣的:
void saveData(char* filename) {
fstream filestr;
char * name = "first data\n";
int n;
n=10;
char* data= "asdfghjkl;";
filestr.open (filename, fstream::out | fstream::binary);
for (int j = 0; j<5 ; j++)
{
filestr << name;
filestr << strlen(data);
filestr << data;
}
filestr.close();
}
void readData(char* filename) {
fstream filestr;
int n =0;
filestr.open (filename, fstream::in | fstream::binary);
while(!filestr.eof())
{
string name;
getline(filestr,name,'\n');
printf("name is %s\n",name.c_str());
filestr >> n;
char *data = new char[n];
for (int i = 0; i < n; i++) {
filestr >> data[i];
}
printf("n is%d\ndata is %s\n",n,data);
}
filestr.close();
}
但在閱讀的問題是:
1-(我不認爲這是一個真正的問題),它打印除實際數據以外的其他字符。 2-對readData
函數我得到輸出次(在我最後一次獲得每場作爲一個空場),而我只寫了次!任何人都知道這是爲什麼?與while(!filestr.eof())
有關?
感謝您的幫助
我嘗試使用READDATA功能,我只寫了讀取數據,但我從printf的輸出爲「代碼是ASDFGHJKL;²²²²▌▌1US \♀+「當數據是char * data =」asdfghjkl;「時,任何人都知道這是爲什麼? – Reem 2010-05-01 17:58:46