Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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

И на что это указывает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо