Мне нужно создать файл, содержащий «имя», которое является строкой-массивом char-, и «data», который является массивом байтов-массивом char в C ++, - но первая проблема, с которой я столкнулся, состоит в том, как отделить "имя" из "данных"? символ новой строки может работать в этом случае (при условии, что у меня нет «\ n» в имени), но у меня могут быть специальные символы в части «данные», поэтому нет никакого способа узнать, когда это заканчивается, поэтому я помещаю Значение int в файле перед данными, которые имеют размер «data»!
Я пытался сделать это с помощью кода следующим образом:
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;
};
но в С ++ это было нелегко !!
Я также попробовал следующее:
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
функция Я получаю вывод 6 раз (в последний раз я получаю каждое поле как пустое поле), в то время как я написал только 5 раз! Кто-нибудь знает, почему это? это связано с while(!filestr.eof())
??
Спасибо за помощь