cRecord3000 = Record
mNum : string;
mDate : Tdate;
mTime : Ttime;
mState : array[1..12, 1..3] of integer;
mdte : integer;
end;
有这样的一个记录,,在写进文件(文本文件) 和读出来
1。写文件,,如果写的时候文件不存在就自动创建
2。读文件,,可以,指定读哪一个记录
我用这样的方法
var
i : integer;
hfile : integer;
arecord : cRecord3000;
brecord : cRecord3000;
begin
arecord.GameNum :='ssssssdddd';
arecord.dte := 3;
for i := 1 to 12 do
begin
arecord.StakeState[i][1] :=i ;
end;
hfile:= fileopen('C:\My Documents\ddd\aaa.txt', fmOpenWrite or fmShareDenyNone);
filewrite(hfile,arecord,sizeof(cRecord3000));
fileread(hfile,brecord, sizeof(cRecord3000));
fileclose(hfile);
showmessage(brecord.mNum);
showmessage(inttostr(brecord.mdte ));
end;
写进去的是乱码,,读出来的也不是原来写进去的,,,,
而且 filewrite不能自动创建(如果文件不存在),,我也不知道什么指定读哪一条记录,,
哪位大虾帮一下忙
9 个解决方案
#1
不存在,就创建文件
strFile:=ExtractfilePath(application.ExeName)+'test.txt';
if not FileExists(strfile) then
begin
FileCreate(strFile);
end;
strFile:=ExtractfilePath(application.ExeName)+'test.txt';
if not FileExists(strfile) then
begin
FileCreate(strFile);
end;
#2
procedure TForm1.Button1Click(Sender: TObject);
var
BackupName: string;
FileHandle: Integer;
StringLen: Integer;
X: Integer;
Y: Integer;
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
begin
BackupName := ExtractFileName(SaveDialog1.FileName);
BackupName := ChangeFileExt(BackupName, '.BAK');
if not RenameFile(SaveDialog1.FileName, BackupName) then
raise Exception.Create('Unable to create backup file.');
end;
FileHandle := FileCreate(SaveDialog1.FileName);
{ Write out the number of rows and columns in the grid. }
FileWrite(FileHandle,
StringGrid1.ColCount, SizeOf(StringGrid1.ColCount));
FileWrite(FileHandle,
StringGrid1.RowCount, SizeOf(StringGrid1.RowCount));
for X := 0 to StringGrid1.ColCount ?1 do
begin
for Y := 0 to StringGrid1.RowCount ?1 do
begin
{ Write out the length of each string, followed by the string itself. }
StringLen := Length(StringGrid1.Cells[X,Y]);
FileWrite(FileHandle, StringLen, SizeOf(StringLen));
FileWrite(FileHandle,
StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]);
end;
end;
FileClose(FileHandle);
end;
end;
var
BackupName: string;
FileHandle: Integer;
StringLen: Integer;
X: Integer;
Y: Integer;
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
begin
BackupName := ExtractFileName(SaveDialog1.FileName);
BackupName := ChangeFileExt(BackupName, '.BAK');
if not RenameFile(SaveDialog1.FileName, BackupName) then
raise Exception.Create('Unable to create backup file.');
end;
FileHandle := FileCreate(SaveDialog1.FileName);
{ Write out the number of rows and columns in the grid. }
FileWrite(FileHandle,
StringGrid1.ColCount, SizeOf(StringGrid1.ColCount));
FileWrite(FileHandle,
StringGrid1.RowCount, SizeOf(StringGrid1.RowCount));
for X := 0 to StringGrid1.ColCount ?1 do
begin
for Y := 0 to StringGrid1.RowCount ?1 do
begin
{ Write out the length of each string, followed by the string itself. }
StringLen := Length(StringGrid1.Cells[X,Y]);
FileWrite(FileHandle, StringLen, SizeOf(StringLen));
FileWrite(FileHandle,
StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]);
end;
end;
FileClose(FileHandle);
end;
end;
#3
bee2518(迷茫ing) 我是想有没有哪个函数可以自己直接创建,,,没有的话当然这样也可以,,
jinjazz(近身剪(N-P攻略)) 写一个字符串当然可以,,,,但是
filewrite(hfile,arecord{一个记录},sizeof(cRecord3000));这样写进去的时候会是乱码,,,
还有就是我读的时候,,,(比如一个文件时写了3000个这样的记录),,我要读出只是单单读出第一百条记录
什么读
jinjazz(近身剪(N-P攻略)) 写一个字符串当然可以,,,,但是
filewrite(hfile,arecord{一个记录},sizeof(cRecord3000));这样写进去的时候会是乱码,,,
还有就是我读的时候,,,(比如一个文件时写了3000个这样的记录),,我要读出只是单单读出第一百条记录
什么读
#4
那你干吗不用数据库
#5
,,不能用数据库,,太慢了,,,总之忘掉数据库是什么东西
#6
我用过 vb 里的,,open/get/put/close/可以指定一次读多长,从哪里开始读,读出来的东西可以直接放在一个结构里,,,虽然不是很好用,,但能实现我要的东西,,,,
Delphi,刚学会,,不是很熟,有哪位可以帮一下忙
Delphi,刚学会,,不是很熟,有哪位可以帮一下忙
#7
没有人懂吗???不可能吧
#8
你可以使用记录文件,
但是record中不可有不定长的类型,如string (可用char数组)
cRecord3000 = Record
mNum : array [0..50] of Char; //不可用string
mDate : Tdate;
mTime : Ttime;
mState : array[1..12, 1..3] of integer;
mdte : integer;
end;
var
MyFile: file of cRecord3000; //结构型文件
tmpRec: cRecord3000;
hFile, i: Integer;
begin
if FileExists('c:\a.txt') then //创建文件
hFile := FileOpen('c:\a.txt', fmOpenReadWrite)
else
hFile := FileCreate('c:\a.txt', fmCreate);
if (hFile < 0 ) then
exit;
try
FileSeek(hFile, 0, 0); //查找文件的开头
for i := 0 to 20 do
begin
FillChar(tmpRec, SizeOf(cRecord3000), 0);
tmpRec.mNum := 'wer erwerwer';
tmpRec.mDate := date();
tmpRec.mTime := time();
tmpRec.mdte := i;
FileWrite(hFile, tmpRec, SizeOf(cRecord3000)); //写文件
end;
FillChar(tmpRec, SizeOf(cRecord3000), 0);
//定位到第一条文件(从0开始)
if (FileSeek(hFile, 1 * SizeOf(cRecord3000), 0) >= 0) then
begin
if (FileRead(hFile, tmpRec, SizeOf(cRecord3000)) >= 0) then //读文件
ShowMessage(FormatDatetime('yyyy/mm/dd', tmpRec.mDate));
end;
finally
FileClose(hFile);
end;
end;
但是record中不可有不定长的类型,如string (可用char数组)
cRecord3000 = Record
mNum : array [0..50] of Char; //不可用string
mDate : Tdate;
mTime : Ttime;
mState : array[1..12, 1..3] of integer;
mdte : integer;
end;
var
MyFile: file of cRecord3000; //结构型文件
tmpRec: cRecord3000;
hFile, i: Integer;
begin
if FileExists('c:\a.txt') then //创建文件
hFile := FileOpen('c:\a.txt', fmOpenReadWrite)
else
hFile := FileCreate('c:\a.txt', fmCreate);
if (hFile < 0 ) then
exit;
try
FileSeek(hFile, 0, 0); //查找文件的开头
for i := 0 to 20 do
begin
FillChar(tmpRec, SizeOf(cRecord3000), 0);
tmpRec.mNum := 'wer erwerwer';
tmpRec.mDate := date();
tmpRec.mTime := time();
tmpRec.mdte := i;
FileWrite(hFile, tmpRec, SizeOf(cRecord3000)); //写文件
end;
FillChar(tmpRec, SizeOf(cRecord3000), 0);
//定位到第一条文件(从0开始)
if (FileSeek(hFile, 1 * SizeOf(cRecord3000), 0) >= 0) then
begin
if (FileRead(hFile, tmpRec, SizeOf(cRecord3000)) >= 0) then //读文件
ShowMessage(FormatDatetime('yyyy/mm/dd', tmpRec.mDate));
end;
finally
FileClose(hFile);
end;
end;
#9
meiqingsong(阿飛) 非常感
#1
不存在,就创建文件
strFile:=ExtractfilePath(application.ExeName)+'test.txt';
if not FileExists(strfile) then
begin
FileCreate(strFile);
end;
strFile:=ExtractfilePath(application.ExeName)+'test.txt';
if not FileExists(strfile) then
begin
FileCreate(strFile);
end;
#2
procedure TForm1.Button1Click(Sender: TObject);
var
BackupName: string;
FileHandle: Integer;
StringLen: Integer;
X: Integer;
Y: Integer;
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
begin
BackupName := ExtractFileName(SaveDialog1.FileName);
BackupName := ChangeFileExt(BackupName, '.BAK');
if not RenameFile(SaveDialog1.FileName, BackupName) then
raise Exception.Create('Unable to create backup file.');
end;
FileHandle := FileCreate(SaveDialog1.FileName);
{ Write out the number of rows and columns in the grid. }
FileWrite(FileHandle,
StringGrid1.ColCount, SizeOf(StringGrid1.ColCount));
FileWrite(FileHandle,
StringGrid1.RowCount, SizeOf(StringGrid1.RowCount));
for X := 0 to StringGrid1.ColCount ?1 do
begin
for Y := 0 to StringGrid1.RowCount ?1 do
begin
{ Write out the length of each string, followed by the string itself. }
StringLen := Length(StringGrid1.Cells[X,Y]);
FileWrite(FileHandle, StringLen, SizeOf(StringLen));
FileWrite(FileHandle,
StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]);
end;
end;
FileClose(FileHandle);
end;
end;
var
BackupName: string;
FileHandle: Integer;
StringLen: Integer;
X: Integer;
Y: Integer;
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
begin
BackupName := ExtractFileName(SaveDialog1.FileName);
BackupName := ChangeFileExt(BackupName, '.BAK');
if not RenameFile(SaveDialog1.FileName, BackupName) then
raise Exception.Create('Unable to create backup file.');
end;
FileHandle := FileCreate(SaveDialog1.FileName);
{ Write out the number of rows and columns in the grid. }
FileWrite(FileHandle,
StringGrid1.ColCount, SizeOf(StringGrid1.ColCount));
FileWrite(FileHandle,
StringGrid1.RowCount, SizeOf(StringGrid1.RowCount));
for X := 0 to StringGrid1.ColCount ?1 do
begin
for Y := 0 to StringGrid1.RowCount ?1 do
begin
{ Write out the length of each string, followed by the string itself. }
StringLen := Length(StringGrid1.Cells[X,Y]);
FileWrite(FileHandle, StringLen, SizeOf(StringLen));
FileWrite(FileHandle,
StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]);
end;
end;
FileClose(FileHandle);
end;
end;
#3
bee2518(迷茫ing) 我是想有没有哪个函数可以自己直接创建,,,没有的话当然这样也可以,,
jinjazz(近身剪(N-P攻略)) 写一个字符串当然可以,,,,但是
filewrite(hfile,arecord{一个记录},sizeof(cRecord3000));这样写进去的时候会是乱码,,,
还有就是我读的时候,,,(比如一个文件时写了3000个这样的记录),,我要读出只是单单读出第一百条记录
什么读
jinjazz(近身剪(N-P攻略)) 写一个字符串当然可以,,,,但是
filewrite(hfile,arecord{一个记录},sizeof(cRecord3000));这样写进去的时候会是乱码,,,
还有就是我读的时候,,,(比如一个文件时写了3000个这样的记录),,我要读出只是单单读出第一百条记录
什么读
#4
那你干吗不用数据库
#5
,,不能用数据库,,太慢了,,,总之忘掉数据库是什么东西
#6
我用过 vb 里的,,open/get/put/close/可以指定一次读多长,从哪里开始读,读出来的东西可以直接放在一个结构里,,,虽然不是很好用,,但能实现我要的东西,,,,
Delphi,刚学会,,不是很熟,有哪位可以帮一下忙
Delphi,刚学会,,不是很熟,有哪位可以帮一下忙
#7
没有人懂吗???不可能吧
#8
你可以使用记录文件,
但是record中不可有不定长的类型,如string (可用char数组)
cRecord3000 = Record
mNum : array [0..50] of Char; //不可用string
mDate : Tdate;
mTime : Ttime;
mState : array[1..12, 1..3] of integer;
mdte : integer;
end;
var
MyFile: file of cRecord3000; //结构型文件
tmpRec: cRecord3000;
hFile, i: Integer;
begin
if FileExists('c:\a.txt') then //创建文件
hFile := FileOpen('c:\a.txt', fmOpenReadWrite)
else
hFile := FileCreate('c:\a.txt', fmCreate);
if (hFile < 0 ) then
exit;
try
FileSeek(hFile, 0, 0); //查找文件的开头
for i := 0 to 20 do
begin
FillChar(tmpRec, SizeOf(cRecord3000), 0);
tmpRec.mNum := 'wer erwerwer';
tmpRec.mDate := date();
tmpRec.mTime := time();
tmpRec.mdte := i;
FileWrite(hFile, tmpRec, SizeOf(cRecord3000)); //写文件
end;
FillChar(tmpRec, SizeOf(cRecord3000), 0);
//定位到第一条文件(从0开始)
if (FileSeek(hFile, 1 * SizeOf(cRecord3000), 0) >= 0) then
begin
if (FileRead(hFile, tmpRec, SizeOf(cRecord3000)) >= 0) then //读文件
ShowMessage(FormatDatetime('yyyy/mm/dd', tmpRec.mDate));
end;
finally
FileClose(hFile);
end;
end;
但是record中不可有不定长的类型,如string (可用char数组)
cRecord3000 = Record
mNum : array [0..50] of Char; //不可用string
mDate : Tdate;
mTime : Ttime;
mState : array[1..12, 1..3] of integer;
mdte : integer;
end;
var
MyFile: file of cRecord3000; //结构型文件
tmpRec: cRecord3000;
hFile, i: Integer;
begin
if FileExists('c:\a.txt') then //创建文件
hFile := FileOpen('c:\a.txt', fmOpenReadWrite)
else
hFile := FileCreate('c:\a.txt', fmCreate);
if (hFile < 0 ) then
exit;
try
FileSeek(hFile, 0, 0); //查找文件的开头
for i := 0 to 20 do
begin
FillChar(tmpRec, SizeOf(cRecord3000), 0);
tmpRec.mNum := 'wer erwerwer';
tmpRec.mDate := date();
tmpRec.mTime := time();
tmpRec.mdte := i;
FileWrite(hFile, tmpRec, SizeOf(cRecord3000)); //写文件
end;
FillChar(tmpRec, SizeOf(cRecord3000), 0);
//定位到第一条文件(从0开始)
if (FileSeek(hFile, 1 * SizeOf(cRecord3000), 0) >= 0) then
begin
if (FileRead(hFile, tmpRec, SizeOf(cRecord3000)) >= 0) then //读文件
ShowMessage(FormatDatetime('yyyy/mm/dd', tmpRec.mDate));
end;
finally
FileClose(hFile);
end;
end;
#9
meiqingsong(阿飛) 非常感