type  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不能自动创建(如果文件不存在),,我也不知道什么指定读哪一条记录,,哪位大虾帮一下忙

解决方案 »

  1.   

    不存在,就创建文件
    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;
      

  3.   

    bee2518(迷茫ing)   我是想有没有哪个函数可以自己直接创建,,,没有的话当然这样也可以,,
    jinjazz(近身剪(N-P攻略)) 写一个字符串当然可以,,,,但是
    filewrite(hfile,arecord{一个记录},sizeof(cRecord3000));这样写进去的时候会是乱码,,,还有就是我读的时候,,,(比如一个文件时写了3000个这样的记录),,我要读出只是单单读出第一百条记录
    什么读
      

  4.   

    我用过  vb 里的,,open/get/put/close/可以指定一次读多长,从哪里开始读,读出来的东西可以直接放在一个结构里,,,虽然不是很好用,,但能实现我要的东西,,,,
    Delphi,刚学会,,不是很熟,有哪位可以帮一下忙
      

  5.   

    你可以使用记录文件,
    但是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;
      

  6.   

    meiqingsong(阿飛)  非常感