Двоичный файл проблемы в режиме чтения / записи с tfilestream - PullRequest
1 голос
/ 10 июня 2011

Здравствуйте, мне нужно работать с очень большими двоичными файлами, поэтому я не могу использовать такие функции, как Assign (), Closefile () и т. Д. Я хочу использовать TFileStream для его методов Read () / Write ().Но у меня проблема, потому что я не могу прочитать то, что написал в поток.Я понял, что проблема связана с кодировкой, поэтому я думаю, что мне нужно использовать Unicode, а не Ansi.Но я не поняла, как это сделать.Может ли кто-нибудь помочь мне с примерами?Я знаю, как записывать / читать из / в файл, но это не помогает мне решить проблему.

Ответы [ 3 ]

3 голосов
/ 10 июня 2011

Если вы управляете письмом и чтением, вы можете использовать читателей и писателей. Например:

var
  reader : TReader;
begin
  reader := TReader.Create(MyStream, BufferSize);
  try
    myString : = reader.ReadString;

  finally
    reader.Free;
  end;
end;

В TReader есть способ различать юникод и анстистринг, если они написаны TWriter.

Если вы не контролируете часть записи. Надеюсь, у вас есть способ узнать формат файла. (Хотя бы строки и их размер). Таким образом, вы можете подготовить буфер для чтения символов.

0 голосов
/ 10 июня 2011

Если вы хотите записывать / читать строки из / в поток, самый простой способ - привести вашу строку в виде короткой строки, длина которой всегда 255 символов (но это означает, что ваша строка не должна быть длиннее 255 символов).Если вам нужно только читать / записывать строки в своих потоках, используйте взамен TStringList.

В противном случае у вас есть другие более сложные опции:

  • запись / чтение TStringList в поток (затем вам нужно реализовать своего рода формат файла)
  • записать строку и извлечь ее читать символ по символу и накапливать символы до тех пор, пока не встретится нулевой символ, повторите операцию для каждой строки
0 голосов
/ 10 июня 2011

Извините, мой ответ был неправильным, как сказал Андреас. Может быть, этот пост поможет вам? Запись строки в TFileStream в Delphi 2010

...