![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись и чтение в/из файл(-а) [Delphi]
Elec3C © (2007-12-11 16:56:00)При запуске и завершении приложения мне нужно, как можно быстрее,
загружать/сохранять в файл некие текстовые данные. Какой способ посоветуете использовать?
P.S. Или всё-таки использовать паскалевкий: AssignFile, Reset... или через Streams?
D[u]fa (2008-11-27 17:11:00) [1]Кого-то торкнуло и не отпускает....
Rouse_ (2008-11-27 15:46:00) [2]К сожалению не получиться... Пример не влезет в требуемый винт размером в 3 гектара, если прикупишь на парочку хардов для хранения примера каждый по семь терабайт, то тогда могу переслать его по почте :)
Palladin (2008-11-27 15:30:00) [3]называется, школьники-блондины в интернете...
ROMEO (2008-11-27 15:04:00) [4]СПАСИБА БОЛЬШОЕ ЗА ОТВЕТ НА ЗАПРОС ПО ДАННОЙ ТЕМЕ . ЕСЛИ МОЖИТЕ НАПИШИТЕ ПОЖАЛУЙСТА ПРИМЕР ОПЕРАЦЫОННОЙ СИСТЕМЫ НА DELPHI ИЛИ ПРИМЕР ТАКОГО ПРИЛОЖЕНИЯ КОТОРОЕ ПОЗВОЛИТ КОПИРОВАТЬ ФАЙЛЫ DJVU PDF В СТАРЫЙ WORD ИЛИ ЖЕ ПРИМЕР КОДЕКОВ ДЛЯ ВИДЕО ПОД КОМПЬЮТЕР 98 - ГО ГОЛА ВЫПУСКА (У КОТОРОГО ВИНТ НА 3 ГЕКТАРА ) И ЖЕЛАТЕЛЬНО ТОЖЕ НА DELPHI.
GMax (2007-12-17 00:29:00) [5]Elec3C не читатель, Elec3C писатель. умолкаю %)
Elec3C (2007-12-15 13:12:00) [6]
> Elec3C, я не примерчик,
Я просил привести пример использования буфферизированой/го записи/чтения
файла, а не называл тебя "примерчиком"!!!
GMax (2007-12-15 00:04:00) [7]нашел таки свой поправленный слегка вариант.
правда он все равно больне 4 гиг не понимает и с новыми колстримами на in64 не совместим, но переделывать неохота
http://www.terraspace.ru/gmax/progs/kolstreams.zip
GMax (2007-12-14 23:58:00) [8]Elec3C, я не примерчик, я ссылку на www.thaddy.com дам :)
там есть KOLBufferedStream. правда в нем есть немного ошибок, Тэдди их так и не поправил, хотя я ему патч высылал, но для 5 мег файла сойдёт :)
Elec3C (2007-12-13 16:52:00) [9]
> Barloggg
Спасибо.
Barloggg (2007-12-13 10:57:00) [10]
> Последняя просьба: Barloggg можешь привести примерчик по
> NewMemoryStream?
var strm:Pstream;
strm:=NewMemorystream;
...
запись в strm
...
strm.savetofile('filename',0,strm.position);
strm.free;
Elec3C (2007-12-13 00:51:00) [11]
> GMax
А можно примерчик буфферизированой/го записи/чтения?
GMax (2007-12-12 23:43:00) [12]Filestream'овсеий ReadStr ну просто жутко медленный.
ну и запись по одному байту в стиле WriteStr(s); WriteStr(#13) будет существенно медленнее, чем WriteStr(S+#13)
с BufferedStream от Thaddy ускорение на порядок (или два, не помню уже)
если надо быстро, надо буферизовать обязательно. или хотя бы через memorystream
Elec3C (2007-12-12 20:29:00) [13]Последняя просьба: Barloggg можешь привести примерчик по NewMemoryStream?
Elec3C (2007-12-12 16:38:00) [14]
> Dimaxx
> D[u]fa
> Barloggg
Всем спасибо.
Barloggg (2007-12-12 14:48:00) [15]
> Elec3C © (12.12.07 13:32) [6]
>
>
> > Barloggg
>
> А если файл > 5 мб?
>
да хоть сколько. оперативки у нас теперь много.
Я таким образом в одной программе сбрасывал на диск 50 мегабайтные битмапы компонуя их в памяти побайтно. запись на диск длилась много меньше чем создание и занимало полторы-три секунды. Так что можно.
D[u]fa (2007-12-12 14:26:00) [16]есть функции StrLoadFromFile\StrSaveToFile
Dimaxx (2007-12-12 13:47:00) [17]//записи/перезаписи файла
Procedure WriteFile(s, FileName:string);
var F: PStream;
begin
F:=NewWriteFileStream(FileName);
F.Position:=F.Size;
try
F.WriteStrZ(s);
finally
F.Free;
end;
end;
//Чтение файла
var
s: string;
F: PStream;
begin
F:=NewReadFileStream('c:\1.txt');
try
F.Position:=10;
F.ReadStrZ(S);
finally
F.Free;
end;
end;
Это для случая, когда строки оканчиваются нулевым байтом. Если нужно завершать стандартно (#13#10), то так:
//записи/перезаписи файла
Procedure WriteFile(s, FileName:string);
var F: PStream;
C: Char;
begin
F:=NewWriteFileStream(FileName);
F.Position:=F.Size;
try
F.WriteStr(s);
C:=#13;
F.Write(C,1);
C:=#10;
F.Write(C,1);
finally
F.Free;
end;
end;
//Чтение файла
var
s: string;
F: PStream;
begin
F:=NewReadFileStream('c:\1.txt');
try
F.Position:=10;
F.ReadStr(S);
finally
F.Free;
end;
end;
Elec3C (2007-12-12 13:32:00) [18]
> Barloggg
А если файл > 5 мб?
Barloggg (2007-12-12 09:22:00) [19]открывать напрямую файловый поток это не быстро. а если работа идет с сетевого диска, так вообще убицца.
самый быстрый способ это создать NewMemoryStream. все записи сделать в него, а потом после всего сделать stream.savetofile и сбросить поток на диск одним махом.
Andrey_rus (2007-12-11 20:10:00) [20]Зачем использовать обертки!
Используй WinAPI.
Чтение и запись файлов в нем элементарны.