Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.042 c
4-1129480611
FunkyByte
2005-10-16 20:36
2005.12.18
Как получить путь к папке "Мои документы"?


14-1132815553
Lexer
2005-11-24 09:59
2005.12.18
С нашего сайта архив стал скачиваться в битом виде


14-1132075768
bogdan
2005-11-15 20:29
2005.12.18
запуск из коммандной строки


1-1132122808
Stanislav
2005-11-16 09:33
2005.12.18
Сохранение пременной типа Record в поток


2-1133522904
oleggar
2005-12-02 14:28
2005.12.18
doc files




   Наверх