![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Writefile, TList и динамические переменные
Wanderer © (2011-12-25 20:29:00)Кидаю в 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);
Ega23 (2011-12-26 10:41:00) [1]
> Имя перепутал, да
Не только имя, много чего.
Wanderer (2011-12-26 08:00:00) [2]
procedure TStrings.SaveToStream(Stream: TStream);
var
S: string;
begin
S := GetTextStr;
Stream.WriteBuffer(Pointer(S)^, Length(S));
end;
Имя перепутал, да
Германн (2011-12-26 02:57:00) [3]Но тут ещё и мой тезкаМ подсуропил :(
WinAPI'шные функции/процедуры в данном случае имеют в виду LPCVOID, если я не ошибаюсь.
Германн (2011-12-26 02:28:00) [4]
> Врёшь, нет там такого ужос-ужоса
Это вольная интерпретация того, что автор где-то там увидел. :)
Ega23 (2011-12-26 01:00:00) [5]
> Подсмотрел в исходниках TFileStream
Врёшь, нет там такого ужос-ужоса
Wanderer (2011-12-26 00:13:00) [6]
writefile(h, Pointer(p.code)^, length(p.text), k, nil);
Подсмотрел в исходниках TFileStream
Сергей М. (2011-12-25 21:45:00) [7]
> На первый символ text?
На 1-й символ указывает не p^.text, а PChar(p.text)
Dimka Maslov (2011-12-25 21:13:00) [8]
> Скорость важна
TFileStream это обёртка над CreateFile/WriteFile, TStringList.SaveToFile это обёртка над TFileStream. По сравнению с затратами на сохранение файла, дополнительные затраты для этих классов - ничтожны.
Rambo (2011-12-25 21:00:00) [9]
> А лучше воспользоваться TFileStream или TStringList
Скорость важна
> И на что это указывает?
На первый символ text?
Dimka Maslov (2011-12-25 20:40:00) [10]writefile(h, PChar(p.text)^, length(p.text), k, nil);
А лучше воспользоваться TFileStream или TStringList
var 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;
Германн (2011-12-25 20:35:00) [11]
> p^.text
И на что это указывает?