|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Обработка больших файлов 2
извени, не успел отписатся.
на предедущюю тему по поводу розбития файлов на куски. 1 - открываеш файл и загоняеш его в поток. 2 - узнаеш длину потока 3 - исходя из длинны потока и размера блока, узнаеш количество блоков (есть определенные нюансы )))))) 4 - цикл, от 0 до n - кусков 5 - создать поток (новый файл) 6 - функцией CopyFrom(); копируеш нужный обьем с исходного файла (потока) в созданный. да и все вообщем. копирование быстрее, нежели копирует сама винда. нужен исходный код - пиши, выложу. Говори что думаешь, думай, что говоришь. (Шоссе 60) |
#2
|
||||
|
||||
Скинь код, буду очень признателен
|
#3
|
|||
|
|||
1 - обявляеш глобальную переменную типа
FromF2: TFileStream; 2 - открываеш файл и загоняеш в поток Код:
var NBlok, kys: Variant; // для определения количества кусков i, k: Integer; // счетчик. Tofile: TFileStream; fre: String; Vile: Integer; home, endi, endFrom, telo: integer; begin if OpenDialog1.Execute then // открыт опен длг begin FromF2:=TFileStream.Create(OpenDialog1.FileName, fmOpenRead);//открываем файл // Edit1.Text:=OpenDialog1.FileName; //Edit2.Text:=IntToStr(FromF2.Size)+' байт'; // инфо о файле end; //--------------------------------------------------- //секторов С ПЕРВОГО а не 0!!!!!!!!!! NBlok:=FromF2.Size/512; // длина в секторах // Проверка на количество реальных блоков. if NBlok*512=FromF2.Size then begin NBlok:=NBlok+1; end; // Edit3.Text:=IntToStr(NBlok)+' сект'; // Label3.Caption:=IntToStr(FromF2.Size); // Label4.Caption:=IntToStr(NBlok); ..... FromF2.Seek(0, soFromBeginning); // перевод каретки в начало диска. kys:=NBlok; endFrom:=FromF2.Size; Vile:=kys*512; for i:=1 to kys do // установка количества файлов begin telo:=vile; if i=kys then begin telo:=endFrom-(kys-1)*Vile;// определение размера последнего куска end; fre:=IntToStr(i)+'.byt'; Tofile:=TFileStream.Create(DirectoryListBox1.Directory+'\'+fre, fmCreate); // выбор папки сохранения файлов Tofile.CopyFrom(FromF2, telo); // само сохранение инфы. Tofile.Free; end; FromF2.Free; end; Говори что думаешь, думай, что говоришь. (Шоссе 60) Последний раз редактировалось Admin, 14.01.2010 в 12:50. |
#4
|
||||
|
||||
Спасибо, буду разбираться
|