掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TFileStreamのランダム読み出しついて教えてください。 (ID:33499)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
固定長レコードでない場合 Indexファイル作ったほうが無難 (DBと同じ) procedure TForm1.Button1Click(Sender: TObject); var fs,fs2:TFileStream; fn,fn2,s:string; I64: Int64; Size: Integer; begin fn := 'c:\TestData.txt'; fn2 := 'c:\TestData.idx'; if FileExists(fn) then begin fs := TFileStream.Create(fn,fmOpenReadWrite or fmShareDenyWrite); fs.Seek(0,soFromEnd);// ファイルの末尾にシークして移動 end else begin fs := TFileStream.Create(fn,fmCreate or fmShareDenyWrite); end; if FileExists(fn2) then begin fs2 := TFileStream.Create(fn2,fmOpenReadWrite or fmShareDenyWrite); fs2.Seek(0,soFromEnd);// ファイルの末尾にシークして移動 end else begin fs2 := TFileStream.Create(fn2,fmCreate or fmShareDenyWrite); end; try s := 'data : '+IntToStr(counter); Inc(counter); (* Index *) I64 := fs.Position; fs2.Write(I64,SizeOf(I64)); //Index (* レコード長 *) Size := Length(S); fs.Write(Size,SizeOf(Size)); (* データ *) fs.Write(PChar(s)^,Length(s)); finally fs.Free; fs2.Free; end; end; function TForm1.LoadFromFile(Index: Integer): String; var fs,fs2:TFileStream; fn,fn2,s:string; I64: Int64; Buffer: array[0..MAX_PATH+4] of Char; Size: Integer; begin Result := ''; fn := 'c:\TestData.txt'; fn2 := 'c:\TestData.idx'; fs := TFileStream.Create(fn,fmOpenRead or fmShareDenyRead); fs2 := TFileStream.Create(fn2,fmOpenRead or fmShareDenyRead); try fs2.Position := Index * SizeOf(I64); fs2.Read(I64,SizeOf(I64)); fs.Position := I64; fs.Read(Size,SizeOf(Size)); Buffer := ''; fs.Read(Buffer,Size); Result := StrPas(Buffer); finally fs.Free; fs2.Free; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.