19 个解决方案
#1
关注
#2
我一直不大懂,文件头中的什么偏移量是干吗的,为什么在头上要记录文件大小等
#3
有人知道吗
#4
Windows系统封装了磁盘系统,使得程序员不必面对磁盘的物理结构,它向用户提供了文件这一概念,每打开一个文件时,Windows内部都有一个文件句柄(Handle),和一个变量(即文件指针),指向文件的当前位置,初始打开时,指针值为零,
当读取操作是从当前位置进行的.读了多少字节,指针就向下移动多少个字节,而Seek函数是用来移动这个指针的!
当读取操作是从当前位置进行的.读了多少字节,指针就向下移动多少个字节,而Seek函数是用来移动这个指针的!
#5
有例程吗?
#6
有人帮忙吗,我急呀,谢谢啦
#7
关注,如果有请给小弟发一封!这里先谢谢啦!
ahai-ahai@263.net
ahai-ahai@263.net
#8
你可以找一本稍微深入的讲授c/c++的书,只要上面涉及到文件都有这样的格式,一般就是像什么客户资料的系统。
#9
我去找找看,如果哪位有的话,也可以告诉我一下
#10
你自己定义一些结构体
然后按你想要的方法写到文件中
就是一个你自己定义的文件格式了
然后按你想要的方法写到文件中
就是一个你自己定义的文件格式了
#11
c++builder深度历险
#12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Add(Edit1->Text,Edit2->Text.ToInt());
}
//---------------------------------------------------------------------------
void Add(AnsiString name,int age)
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(sizeof(mydata)*i++,soFromEnd);
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
这样写入后,我这样读出
void __fastcall TForm1::Button2Click(TObject *Sender)
{
struct mydata1
{
AnsiString name;
int age;
};
mydata1 *ff=new mydata1;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenRead);
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
fo->Read((void *)ff,sizeof(mydata1));
delete fo;
Label1->Caption=(AnsiString)ff->name;
Label2->Caption=(AnsiString)ff->age;
}
但是只能读出当前写入的一个,如果我要读第一次写入的数据,就不行了。怎么办
{
Add(Edit1->Text,Edit2->Text.ToInt());
}
//---------------------------------------------------------------------------
void Add(AnsiString name,int age)
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(sizeof(mydata)*i++,soFromEnd);
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
这样写入后,我这样读出
void __fastcall TForm1::Button2Click(TObject *Sender)
{
struct mydata1
{
AnsiString name;
int age;
};
mydata1 *ff=new mydata1;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenRead);
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
fo->Read((void *)ff,sizeof(mydata1));
delete fo;
Label1->Caption=(AnsiString)ff->name;
Label2->Caption=(AnsiString)ff->age;
}
但是只能读出当前写入的一个,如果我要读第一次写入的数据,就不行了。怎么办
#13
void Add(AnsiString name,int age)
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(0,soFromEnd); //将文件指针移至末尾,soFromEnd是指从未 尾 算 起,然后从末尾添加!
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(0,soFromEnd); //将文件指针移至末尾,soFromEnd是指从未 尾 算 起,然后从末尾添加!
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
#14
to conanbos(特兰克斯) :
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
其中 i 是什么东东?
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
其中 i 是什么东东?
#15
既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
#16
既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
#17
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
i是指定找第次存入的信息的
i是指定找第次存入的信息的
#18
learning.............................................
#19
OpenFile();
WriteFile();
ReadFile();
看看帮助!还有帮助里的See also,都是相关的东西!
WriteFile();
ReadFile();
看看帮助!还有帮助里的See also,都是相关的东西!
#20
#1
关注
#2
我一直不大懂,文件头中的什么偏移量是干吗的,为什么在头上要记录文件大小等
#3
有人知道吗
#4
Windows系统封装了磁盘系统,使得程序员不必面对磁盘的物理结构,它向用户提供了文件这一概念,每打开一个文件时,Windows内部都有一个文件句柄(Handle),和一个变量(即文件指针),指向文件的当前位置,初始打开时,指针值为零,
当读取操作是从当前位置进行的.读了多少字节,指针就向下移动多少个字节,而Seek函数是用来移动这个指针的!
当读取操作是从当前位置进行的.读了多少字节,指针就向下移动多少个字节,而Seek函数是用来移动这个指针的!
#5
有例程吗?
#6
有人帮忙吗,我急呀,谢谢啦
#7
关注,如果有请给小弟发一封!这里先谢谢啦!
ahai-ahai@263.net
ahai-ahai@263.net
#8
你可以找一本稍微深入的讲授c/c++的书,只要上面涉及到文件都有这样的格式,一般就是像什么客户资料的系统。
#9
我去找找看,如果哪位有的话,也可以告诉我一下
#10
你自己定义一些结构体
然后按你想要的方法写到文件中
就是一个你自己定义的文件格式了
然后按你想要的方法写到文件中
就是一个你自己定义的文件格式了
#11
c++builder深度历险
#12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Add(Edit1->Text,Edit2->Text.ToInt());
}
//---------------------------------------------------------------------------
void Add(AnsiString name,int age)
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(sizeof(mydata)*i++,soFromEnd);
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
这样写入后,我这样读出
void __fastcall TForm1::Button2Click(TObject *Sender)
{
struct mydata1
{
AnsiString name;
int age;
};
mydata1 *ff=new mydata1;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenRead);
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
fo->Read((void *)ff,sizeof(mydata1));
delete fo;
Label1->Caption=(AnsiString)ff->name;
Label2->Caption=(AnsiString)ff->age;
}
但是只能读出当前写入的一个,如果我要读第一次写入的数据,就不行了。怎么办
{
Add(Edit1->Text,Edit2->Text.ToInt());
}
//---------------------------------------------------------------------------
void Add(AnsiString name,int age)
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(sizeof(mydata)*i++,soFromEnd);
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
这样写入后,我这样读出
void __fastcall TForm1::Button2Click(TObject *Sender)
{
struct mydata1
{
AnsiString name;
int age;
};
mydata1 *ff=new mydata1;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenRead);
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
fo->Read((void *)ff,sizeof(mydata1));
delete fo;
Label1->Caption=(AnsiString)ff->name;
Label2->Caption=(AnsiString)ff->age;
}
但是只能读出当前写入的一个,如果我要读第一次写入的数据,就不行了。怎么办
#13
void Add(AnsiString name,int age)
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(0,soFromEnd); //将文件指针移至末尾,soFromEnd是指从未 尾 算 起,然后从末尾添加!
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
{
struct mydata
{
AnsiString name;
int age;
};
mydata *ff=new mydata;
ff->name=name;
ff->age=age;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(0,soFromEnd); //将文件指针移至末尾,soFromEnd是指从未 尾 算 起,然后从末尾添加!
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}
#14
to conanbos(特兰克斯) :
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
其中 i 是什么东东?
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
其中 i 是什么东东?
#15
既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
#16
既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运
#17
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
i是指定找第次存入的信息的
i是指定找第次存入的信息的
#18
learning.............................................
#19
OpenFile();
WriteFile();
ReadFile();
看看帮助!还有帮助里的See also,都是相关的东西!
WriteFile();
ReadFile();
看看帮助!还有帮助里的See also,都是相关的东西!