Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];

Вниз

Запись и чтение в/из файл(-а)   Найти похожие ветки 

 
Elec3C ©   (2007-12-11 16:56) [0]

При запуске и завершении приложения мне нужно, как можно быстрее,
загружать/сохранять в файл некие текстовые данные. Какой способ посоветуете использовать?

P.S. Или всё-таки использовать паскалевкий: AssignFile, Reset... или через Streams?


 
Elec3C ©   (2007-12-11 18:22) [1]

Про файловые потоки.
Есть такое(не KOL"овское):

//записи/перезаписи файла
Procedure WriteFile(s, FileName:string);
begin
  with TFileStream.create(FileName, fmCreate or fmOpenWrite) do
    try
      write(pointer(s)^,length(s));
    finally
      free;
    end;
end;
//Чтение файла
var p : PChar;
begin
  GetMem(p, 255);

  with TFileStream.Create("c:\1.txt", fmOpenReadWrite) do
    try
      Seek(10,soFromBeginning);
      read(p^, 254);
    finally
      free;
    end;
 
    FreeMem(p);
end;

Как переписать их под KOL?


 
Дмитрий К ©   (2007-12-11 18:32) [2]

PStrList.LoadFromFile/SaveToFile


 
ANTPro ©   (2007-12-11 18:59) [3]

Или использовать PStream(примеры на сайте есть)


 
Andrey_rus   (2007-12-11 20:10) [4]

Зачем использовать обертки!
Используй WinAPI.
Чтение и запись файлов в нем элементарны.


 
Barloggg   (2007-12-12 09:22) [5]

открывать напрямую файловый поток это не быстро. а если работа идет с сетевого диска, так вообще убицца.

самый быстрый способ это создать NewMemoryStream. все записи сделать в него, а потом после всего сделать stream.savetofile и сбросить поток на диск одним махом.


 
Elec3C ©   (2007-12-12 13:32) [6]


> Barloggg

А если файл > 5 мб?


 
Dimaxx ©   (2007-12-12 13:47) [7]

//записи/перезаписи файла
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;


 
D[u]fa   (2007-12-12 14:26) [8]

есть функции StrLoadFromFile\StrSaveToFile


 
Barloggg   (2007-12-12 14:48) [9]


> Elec3C ©   (12.12.07 13:32) [6]
>
>
> > Barloggg
>
> А если файл > 5 мб?
>

да хоть сколько. оперативки у нас теперь много.
Я таким образом в одной программе сбрасывал на диск 50 мегабайтные битмапы компонуя их в памяти побайтно. запись на диск длилась много меньше чем создание и занимало полторы-три секунды. Так что можно.


 
Elec3C ©   (2007-12-12 16:38) [10]


> Dimaxx
> D[u]fa
> Barloggg

Всем спасибо.


 
Elec3C ©   (2007-12-12 20:29) [11]

Последняя просьба: Barloggg можешь привести примерчик по NewMemoryStream?


 
GMax   (2007-12-12 23:43) [12]

Filestream"овсеий ReadStr ну просто жутко медленный.
ну и запись по одному байту в стиле WriteStr(s); WriteStr(#13) будет существенно медленнее, чем WriteStr(S+#13)

с BufferedStream от Thaddy ускорение на порядок (или два, не помню уже)
если надо быстро, надо буферизовать обязательно. или хотя бы через memorystream


 
Elec3C ©   (2007-12-13 00:51) [13]


> GMax

А можно примерчик буфферизированой/го записи/чтения?


 
Barloggg   (2007-12-13 10:57) [14]


> Последняя просьба: Barloggg можешь привести примерчик по
> NewMemoryStream?


var strm:Pstream;

strm:=NewMemorystream;
...
запись в strm
...
strm.savetofile("filename",0,strm.position);
strm.free;


 
Elec3C ©   (2007-12-13 16:52) [15]


> Barloggg

Спасибо.


 
GMax   (2007-12-14 23:58) [16]

Elec3C, я не примерчик, я ссылку на www.thaddy.com дам :)
там есть KOLBufferedStream. правда в нем есть немного ошибок, Тэдди их так и не поправил, хотя я ему патч высылал, но для 5 мег файла сойдёт :)


 
GMax   (2007-12-15 00:04) [17]

нашел таки свой поправленный слегка вариант.
правда он все равно больне 4 гиг не понимает и с новыми колстримами на in64 не совместим, но переделывать неохота

http://www.terraspace.ru/gmax/progs/kolstreams.zip


 
Elec3C ©   (2007-12-15 13:12) [18]


> Elec3C, я не примерчик,

Я просил привести пример использования буфферизированой/го записи/чтения
файла, а не называл тебя "примерчиком"!!!


 
GMax   (2007-12-17 00:29) [19]

Elec3C не читатель, Elec3C писатель. умолкаю %)


 
ROMEO   (2008-11-27 15:04) [20]

СПАСИБА БОЛЬШОЕ ЗА ОТВЕТ НА ЗАПРОС ПО ДАННОЙ ТЕМЕ  . ЕСЛИ МОЖИТЕ НАПИШИТЕ ПОЖАЛУЙСТА ПРИМЕР ОПЕРАЦЫОННОЙ СИСТЕМЫ НА DELPHI ИЛИ ПРИМЕР ТАКОГО ПРИЛОЖЕНИЯ КОТОРОЕ ПОЗВОЛИТ КОПИРОВАТЬ ФАЙЛЫ DJVU  PDF В СТАРЫЙ WORD  ИЛИ ЖЕ ПРИМЕР КОДЕКОВ ДЛЯ ВИДЕО ПОД КОМПЬЮТЕР 98 - ГО ГОЛА ВЫПУСКА  (У КОТОРОГО ВИНТ НА 3  ГЕКТАРА ) И ЖЕЛАТЕЛЬНО ТОЖЕ НА DELPHI.


 
Palladin ©   (2008-11-27 15:30) [21]

называется, школьники-блондины в интернете...


 
Rouse_ ©   (2008-11-27 15:46) [22]

К сожалению не получиться... Пример не влезет в требуемый винт размером в 3 гектара, если прикупишь на парочку хардов для хранения примера каждый по семь терабайт, то тогда могу переслать его по почте :)


 
D[u]fa   (2008-11-27 17:11) [23]

Кого-то торкнуло и не отпускает....



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

Форум: "KOL";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
2-1286795304
И. Павел
2010-10-11 15:08
2011.01.09
Проблема при закрытии программы


15-1285241479
oxffff
2010-09-23 15:31
2011.01.09
YAR и параметрический полиморфизм


15-1285524433
TUser
2010-09-26 22:07
2011.01.09
Не все ж на семинары эмберкадеро ходить :)


15-1284575107
bissoft
2010-09-15 22:25
2011.01.09
Oracle, ведение истории изменения данных


15-1285360161
Юрий
2010-09-25 00:29
2011.01.09
С днем рождения ! 25 сентября 2010 суббота





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский