![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с выводом потока в файл [WinXP]
inviz © (2009-01-15 14:56:00)Здравствуйте! Помогите пожалуста, зделал такую процедуру
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 файл большой) читаю файл в строку (потоком) заменяю в строке нужный текст своим записываю обратно в файл, когда открываю файл блокнотом там квадратики и каракули в чем может быть ошибка? что не так делается? Помогите пожалуста очень нада.
Anatoly Podgoretsky (2009-01-15 19:15:00) [1]
> а почему в 2 раза больше то?
SizeOf(WideChar)
inviz (2009-01-15 17:55:00) [2]
> han_malign © (15.01.09 17:48) [10]
> > TXT - текстовый файлик открывается блокнотом и нормально
> отображается, обычный текстовый файл. http://ru.wikipedia.
> org/wiki/Txt
Сумничал молодец "возьми с полки пиражок...".
Тема закрыта
han_malign (2009-01-15 17:48:00) [3]
> TXT - текстовый файлик открывается блокнотом и нормально отображается, обычный текстовый файл.
http://ru.wikipedia.org/wiki/Txt
inviz (2009-01-15 17:43:00) [4]Проблема решилась :)
> Servy © (15.01.09 16:22) [4]
> > среда Delphi 2009Тогда AnsiString.
Заменил WideString на AnsiString все стало корректно отображатся Большое Спасиба :)
inviz (2009-01-15 17:14:00) [5]
> SetLength(S, fs.Size); // размер S установлен в два раза
> больше
а почему в 2 раза больше то? по идее же как раз должно быть.
> fs.WriteBuffer(S[1], Length(S)); // здесь наоборот, записано
> в два раза меньше
а тут тогда писать не Length(), а запоминать первоначальный размер строки в переменную (например size) а потом fs.WriteBuffer(S[1], size);?
inviz (2009-01-15 17:08:00) [6]читирую первый свой пост
> Открываю текстовый файл потоком, устанавливаю длинну строки
> S (WideString т.к. TXT файл большой)
TXT - текстовый файлик открывается блокнотом и нормально отображается, обычный текстовый файл.
Anatoly Podgoretsky (2009-01-15 16:58:00) [7]Забыл спросить, а в каком формате был текстовый файл?
Это ты тоже умолчал.
И видишь ли ты нормально этот файл до конвертирования.
Может у тебя не Юникод файл, а ты его как Юникод, тогда естественно, ты его калечишь
Anatoly Podgoretsky (2009-01-15 16:57:00) [8]Тогда ошибки здесь
SetLength(S, fs.Size); // размер S установлен в два раза больше
fs.WriteBuffer(S[1], Length(S)); // здесь наоборот, записано в два раза меньше
Это конечно не объясняет проблем с квадартиками. Вероятнее всего что ты установил в блокноте не тот формат.
Servy (2009-01-15 16:22:00) [9]> среда Delphi 2009
Тогда AnsiString.
inviz (2009-01-15 16:03:00) [10]
> Anatoly Podgoretsky © (15.01.09 16:00) [2]
среда Delphi 2009
Anatoly Podgoretsky (2009-01-15 16:00:00) [11]> inviz (15.01.2009 14:56:00) [0]
А какая у тебя среда?
MBo (2009-01-15 15:26:00) [12]wide убери, просто string