Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
ВнизWritefile, TList и динамические переменные Найти похожие ветки
← →
Wanderer (2011-12-25 20:29) [0]Кидаю в TList записи, а потом создаю из них файлы. Некоторые получаются пустые, а остальные не полные, прошу помочь найти ошибку, вот код:
TMFile=record
text:string;
name:string;
l:integer;
end;
PMFilee=^TMFile;
...
var p:PMFile;
...
new(p);
p.text:=text;
p.name:=name;
p.l:=length(p.text);
files.Add(p);
...
p:=files[i];
h := Createfile(PChar(p.name),
GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL
, 0);
writefile(h, p^.text, length(p.text), k, nil);
← →
Германн © (2011-12-25 20:35) [1]
> p^.text
И на что это указывает?
← →
Dimka Maslov © (2011-12-25 20:40) [2]writefile(h, PChar(p.text)^, length(p.text), k, nil);
А лучше воспользоваться TFileStream или TStringListvar List: TStringList;
....
List := TStringList.Create;
try
for i := 0 to Count do begin
p := files[i];
List.Text := p.text;
List.SaveToFile(p.name);
end;
finally
List.Free;
end;
← →
Rambo (2011-12-25 21:00) [3]
> А лучше воспользоваться TFileStream или TStringList
Скорость важна
> И на что это указывает?
На первый символ text?
← →
Dimka Maslov © (2011-12-25 21:13) [4]
> Скорость важна
TFileStream это обёртка над CreateFile/WriteFile, TStringList.SaveToFile это обёртка над TFileStream. По сравнению с затратами на сохранение файла, дополнительные затраты для этих классов - ничтожны.
← →
Сергей М. © (2011-12-25 21:45) [5]
> На первый символ text?
На 1-й символ указывает не p^.text, а PChar(p.text)
← →
Wanderer (2011-12-26 00:13) [6]
writefile(h, Pointer(p.code)^, length(p.text), k, nil);
Подсмотрел в исходниках TFileStream
← →
Ega23 © (2011-12-26 01:00) [7]
> Подсмотрел в исходниках TFileStream
Врёшь, нет там такого ужос-ужоса
← →
Германн © (2011-12-26 02:28) [8]
> Врёшь, нет там такого ужос-ужоса
Это вольная интерпретация того, что автор где-то там увидел. :)
← →
Германн © (2011-12-26 02:57) [9]Но тут ещё и мой тезкаМ подсуропил :(
WinAPI"шные функции/процедуры в данном случае имеют в виду LPCVOID, если я не ошибаюсь.
← →
Wanderer (2011-12-26 08:00) [10]
procedure TStrings.SaveToStream(Stream: TStream);
var
S: string;
begin
S := GetTextStr;
Stream.WriteBuffer(Pointer(S)^, Length(S));
end;
Имя перепутал, да
← →
Ega23 © (2011-12-26 10:41) [11]
> Имя перепутал, да
Не только имя, много чего.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c