Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

Проблема с выводом потока в файл   Найти похожие ветки 

 
inviz   (2009-01-15 14:56) [0]

Здравствуйте! Помогите пожалуста, зделал такую процедуру

procedure FileReplaceString(const FileName, strFind, strReplace: string);
  var
       fs: TFileStream;
       S: wideString;
begin
  fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone);
  try
  SetLength(S, fs.Size);
  fs.ReadBuffer(S[1], fs.Size);
  finally
  fs.Free;
  end;
  S := StringReplace(S, strFind, strReplace, [rfReplaceAll, rfIgnoreCase]);
  fs := TFileStream.Create(FileName, fmCreate);
  try
  fs.WriteBuffer(S[1], Length(S));
  finally
  fs.Free;
  end;
end;

Открываю текстовый файл потоком, устанавливаю длинну строки S (WideString т.к. TXT файл большой) читаю файл в строку (потоком) заменяю в строке нужный текст своим записываю обратно в файл, когда открываю файл блокнотом там квадратики и каракули в чем может быть ошибка? что не так делается? Помогите пожалуста очень нада.


 
MBo ©   (2009-01-15 15:26) [1]

wide убери, просто string


 
Anatoly Podgoretsky ©   (2009-01-15 16:00) [2]

> inviz  (15.01.2009 14:56:00)  [0]

А какая у тебя среда?


 
inviz   (2009-01-15 16:03) [3]


> Anatoly Podgoretsky ©   (15.01.09 16:00) [2]

среда Delphi 2009


 
Servy ©   (2009-01-15 16:22) [4]

> среда Delphi 2009


Тогда AnsiString.


 
Anatoly Podgoretsky ©   (2009-01-15 16:57) [5]

Тогда ошибки здесь

 SetLength(S, fs.Size);  // размер S установлен в два раза больше
 fs.WriteBuffer(S[1], Length(S)); // здесь наоборот, записано в два раза меньше

Это конечно не объясняет проблем с квадартиками. Вероятнее всего что ты установил в блокноте не тот формат.


 
Anatoly Podgoretsky ©   (2009-01-15 16:58) [6]

Забыл спросить, а в каком формате был текстовый файл?
Это ты тоже умолчал.
И видишь ли ты нормально этот файл до конвертирования.
Может у тебя не Юникод файл, а ты его как Юникод, тогда естественно, ты его калечишь


 
inviz   (2009-01-15 17:08) [7]

читирую первый свой пост
> Открываю текстовый файл потоком, устанавливаю длинну строки
> S (WideString т.к. TXT файл большой)


TXT - текстовый файлик открывается блокнотом и нормально отображается, обычный текстовый файл.


 
inviz   (2009-01-15 17:14) [8]


>  SetLength(S, fs.Size);  // размер S установлен в два раза
> больше

а почему в 2 раза больше то? по идее же как раз должно быть.

>  fs.WriteBuffer(S[1], Length(S)); // здесь наоборот, записано
> в два раза меньше

а тут тогда писать не Length(), а запоминать первоначальный размер строки в переменную (например size) а потом fs.WriteBuffer(S[1], size);?


 
inviz   (2009-01-15 17:43) [9]

Проблема решилась :)

> Servy ©   (15.01.09 16:22) [4]
> > среда Delphi 2009Тогда AnsiString.

Заменил WideString на AnsiString все стало корректно отображатся Большое Спасиба :)


 
han_malign ©   (2009-01-15 17:48) [10]


> TXT - текстовый файлик открывается блокнотом и нормально отображается, обычный текстовый файл.

http://ru.wikipedia.org/wiki/Txt


 
inviz   (2009-01-15 17:55) [11]


> han_malign ©   (15.01.09 17:48) [10]
> > TXT - текстовый файлик открывается блокнотом и нормально
> отображается, обычный текстовый файл.http://ru.wikipedia.
> org/wiki/Txt

Сумничал молодец "возьми с полки пиражок...".

Тема закрыта


 
Anatoly Podgoretsky ©   (2009-01-15 19:15) [12]


> а почему в 2 раза больше то?

SizeOf(WideChar)



Страницы: 1 вся ветка

Текущий архив: 2010.01.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
15-1257122587
Eraser
2009-11-02 03:43
2010.01.03
Протокол и GNU


2-1257917183
Tornado
2009-11-11 08:26
2010.01.03
Как разрешить ввод только заглавных букв?


2-1257999548
Андрей Смирнов
2009-11-12 07:19
2010.01.03
Как доработать функцию поиска, для работы в цикле?


1-1232224539
Igor2010
2009-01-17 23:35
2010.01.03
CheckListBox цвет строки


3-1232432122
pavel_guzhanov
2009-01-20 09:15
2010.01.03
Проблема с памятью