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

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

Запись через BlockWtite


Separator ©   (2005-11-24 06:58:00) 


var
   F: file;
   Temp: PChar;
   Len: Cardinal;
begin
   Assign(F, FileName);
   Rewrite(F);
   Temp:= CreateDump;
   Len:= Length(Temp);
   BlockWrite(F, Temp[0], Len);
   FreeMemory(Temp);
   Close(F)
end;


В тесте Len = 18
В полученном файле кроме 18 байт, еще куча какой-то фигни записалось


Separator   (2005-11-24 09:32:00) [1]

Во еще вопрос, как грамотней или оптимальней будет работать с большими и маленькими(пару сотен байт) объемами:

       Rewrite(F, Length(Temp));
       BlockWrite(F, Temp[0], 1);

или так

       Rewrite(F, 1);
       BlockWrite(F, Temp[0], Length(Temp));


Я склоняюсь к первому методу для маленьких объемов, и какой размер RecSize оптимальней выставлять для больших объемов данных. И можно ли менять RecSize между отдельными записями, т.е. RecSize = 10, выполнили Write, потом установили RecSize в 3 и снова Write?


Separator   (2005-11-24 09:22:00) [2]

стоп, начинаю немного понимать, таким макаром можно записывать каке либо структуризированнае массивы


Separator   (2005-11-24 09:19:00) [3]

так понятно, пишет Count*RecSize байт, а можно пример, когда это реально необходимо?


Separator   (2005-11-24 09:06:00) [4]

Объясните подробно, что значит второй параметр в rewrite?
Я так понял это размер буфера для записи в файл. У меня записывается 37 байт,  RecSize ставлю в 2, записалось лишних байт еще 37


MBo   (2005-11-24 09:04:00) [5]

Почему же не хочет? Очень даже хочет.
Плавно переходим к чтению хелпа по BlockWrite


Separator   (2005-11-24 08:56:00) [6]

а почему не хочет работать с Rewrite(F, Length(Temp));? Или там только 2^n или 1 можно поставить?


MBo   (2005-11-24 08:30:00) [7]

1 поставь


Separator   (2005-11-24 08:29:00) [8]


var
   F: file;// of byte;
   Temp: PChar;
begin
   Result:= False;
   Temp:= CreateDump;
   try
       AssignFile(F, FileName);
       Rewrite(F, Length(Temp));
       BlockWrite(F, Temp[0], Length(Temp));
       CloseFile(F);
       Result:= True
   finally
       FreeMemory(Temp)
   end;
end;


В файл все-рано лишнее записывается


Separator   (2005-11-24 08:27:00) [9]

выставлял rewrite(F, Len), таже фигня


MBo   (2005-11-24 08:17:00) [10]

>Separator
Ну ты всё же вчитайся в хелп насчет второго параметра ;)


Separator   (2005-11-24 07:59:00) [11]

Получилось:


var
   F: file of byte;
   Temp: PChar;
   Len: Cardinal;
begin
   Result:= False;
   Temp:= CreateDump;
   Len:= Length(Temp);
   try
       AssignFile(F, FileName);
       Rewrite(F);
       BlockWrite(F, Temp[0], Len);
       CloseFile(F)
   finally
       FreeMemory(Temp)
   end;
   Result:= True
end;


Только все-таки как записать не типизированный файл размером меньше 128байт?


Separator   (2005-11-24 07:42:00) [12]

ладно, понятно, мнеьше 128 не хочет записывать. Ну а как тогда мне быть?


sniknik   (2005-11-24 07:35:00) [13]

в хелпе по Rewrite написано


Separator   (2005-11-24 07:29:00) [14]

да меня больше интересует вопрос, почему так происходит


sniknik   (2005-11-24 07:20:00) [15]

почитай про Rewrite в хелпе

можно например так (изврат конечно, но размер должен быть правильным)
var
  F: file;
  Temp: PChar;
begin
  Temp:= CreateDump;
  try
    Assign(F, FileName);
    Rewrite(F, Length(Temp));
    BlockWrite(F, Temp[0], 1);
    Close(F)
  finally
    FreeMemory(Temp);
  end;
end;


Наверх

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