Форум: "Основная";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
ВнизПроблема с выводом потока в файл Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c