Главная страница
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.029 c
6-1126192068
integery
2005-09-08 19:07
2005.12.18
помогите разобратса из TcpServer TcpClient


4-1129391237
Tristania
2005-10-15 19:47
2005.12.18
Работа с винчестером напрямую


4-1129396275
g-l-u-k
2005-10-15 21:11
2005.12.18
Очистка контрола


14-1132777064
NightLord
2005-11-23 23:17
2005.12.18
Связь ПО с ПК


14-1132643010
syte_ser78
2005-11-22 10:03
2005.12.18
что с компом?