![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись через 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;