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

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

Дополнительные потоки NTFS


LDV ©   (2008-11-26 16:44:00) 

Хочу написать функции которые считывали и записывали различные значения в Exe при помощи дополнительных файловых потоков Ntsf.

Пока что написал сохранение и чтение целочисленных значений. Для нужных мне типов писать отдельно процедуры как-то не хочется и мне кажется не совсем правильно.


procedure SetOptionalStreamVar(n: Integer;
 Name: string);
var
 M: TMemoryStream;
begin
 M := TMemoryStream.Create;
 with M do
   try
     WriteBuffer(n, SizeOf(n));
     SaveToFile(ParamStr(0) + Name);
   finally
     FreeAndNil(M);
   end;
end;

procedure GetOptionalStreamVar(var n: Integer;
 Name: string);
var
 M: TMemoryStream;
begin
 M := TMemoryStream.Create;
 with M do
   try
     LoadFromFile(
       ParamStr(0) + Name);
     n := PInteger(Memory)^;
   finally
     FreeAndNil(M);
   end;
 end;
end;
 

Вот попытка написать 2 универсальные для разных типов функции: Но так как я новичок мне кажется что они будут выполняться неверно в некоторых ситуация. Дайте совет... относительно алгоритмов.


procedure _SetOptionalStreamVar(const Buf;
   Name: string);
 var
 M: TMemoryStream;
begin
 M := TMemoryStream.Create;
 with M do
   try
     WriteBuffer(Buf, SizeOf(Buf));
       if IsPresent(Name) then
         DeleteFile(ParamStr(0) + Name);
     SaveToFile(ParamStr(0) + Name);
   finally
     FreeAndNil(M);
   end;
 end;

procedure _GetOptionalStreamVar(var Buf;
 Name: string);
var
  M: TMemoryStream;
begin
  if IsPresent(Name)
 then begin
   M := TMemoryStream.Create;
   with M do
     try
       LoadFromFile(
         ParamStr(0) + Name);
       Read(Buf, SizeOf(Size));
     finally
       FreeAndNil(M);
     end;
 end;


Amoeba   (2008-11-26 17:16:00) [1]


> А куда в таком случае происходит запись значения?

В обычный файл с именем ParamStr(0) + Name, у которого расширение 'exe'+Name


LDV   (2008-11-26 17:11:00) [2]


> > SaveToFileSaveToFile знать ничего не знает ни об NTFS
> ни о каких-то доп. файловых потоках, существующих в этой
> ФС - это совершенно другой (прикладной) уровень, ему по
> барабану в какой ФС осуществляется сохранение файла.


А куда в таком случае происходит запись значения?


Сергей М.   (2008-11-26 17:04:00) [3]


> SaveToFile


SaveToFile знать ничего не знает ни об NTFS ни о каких-то доп. файловых потоках, существующих в этой ФС - это совершенно другой (прикладной) уровень, ему по барабану в какой ФС осуществляется сохранение файла.


LDV   (2008-11-26 16:57:00) [4]


> clickmaker ©   (26.11.08 16:47) [2]
> а причем тут дополнительные файловые потоки Ntsf?<Цитата>
>
>
> Сергей М. ©   (26.11.08 16:52) [3]
> Да, вот интересно было бы узнать. причем они тут ?


А что непонятного, значения пишутся/считываются в MemoryStream, а из него в поток NTFS исполняемого файла (ParamStr(0)) SaveToFile(ParamStr(0) + ': Data');


Сергей М.   (2008-11-26 16:52:00) [5]

Да, вот интересно было бы узнать. причем они тут ?


clickmaker   (2008-11-26 16:47:00) [6]

а причем тут дополнительные файловые потоки Ntsf?


Поросенок Винни-Пух   (2008-11-26 16:46:00) [7]

Для стримов есть ридеры и райтеры для записи/чтения разных типов


Наверх

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