Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Запись через BlockWtite   Найти похожие ветки 

 
Separator ©   (2005-11-24 06:58) [0]


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 байт, еще куча какой-то фигни записалось


 
sniknik ©   (2005-11-24 07:20) [1]

почитай про 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;


 
Separator ©   (2005-11-24 07:29) [2]

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


 
sniknik ©   (2005-11-24 07:35) [3]

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


 
Separator ©   (2005-11-24 07:42) [4]

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


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

Получилось:


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байт?


 
MBo ©   (2005-11-24 08:17) [6]

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


 
Separator ©   (2005-11-24 08:27) [7]

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


 
Separator ©   (2005-11-24 08:29) [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;


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


 
MBo ©   (2005-11-24 08:30) [9]

1 поставь


 
Separator ©   (2005-11-24 08:56) [10]

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


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

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


 
Separator ©   (2005-11-24 09:06) [12]

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


 
Separator ©   (2005-11-24 09:19) [13]

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


 
Separator ©   (2005-11-24 09:22) [14]

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


 
Separator ©   (2005-11-24 09:32) [15]

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

       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?



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.041 c
2-1133258980
Malamba
2005-11-29 13:09
2005.12.18
трансформация строки в число ...


2-1133283723
BlacK_DiamonD
2005-11-29 20:02
2005.12.18
События папки


14-1132970523
Юрий Зотов
2005-11-26 05:02
2005.12.18
Просматривая...


14-1132916818
Не молодой
2005-11-25 14:06
2005.12.18
Атака порта


8-1120681700
ronyn
2005-07-07 00:28
2005.12.18
Как запустить поиск всей музыки на компе для добавления её в Плей