Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.01.2010, 19:21
OnzMill OnzMill вне форума
Прохожий
 
Регистрация: 06.10.2009
Сообщения: 48
Репутация: 10
По умолчанию Обработка больших файлов 2

извени, не успел отписатся.

на предедущюю тему по поводу розбития файлов на куски.

1 - открываеш файл и загоняеш его в поток.
2 - узнаеш длину потока
3 - исходя из длинны потока и размера блока, узнаеш количество блоков (есть определенные нюансы ))))))
4 - цикл, от 0 до n - кусков
5 - создать поток (новый файл)
6 - функцией CopyFrom(); копируеш нужный обьем с исходного файла (потока) в созданный.

да и все вообщем. копирование быстрее, нежели копирует сама винда.
нужен исходный код - пиши, выложу.
__________________
Говори что думаешь, думай, что говоришь.
(Шоссе 60)
Ответить с цитированием
  #2  
Старый 14.01.2010, 09:16
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Скинь код, буду очень признателен
Ответить с цитированием
  #3  
Старый 14.01.2010, 11:54
OnzMill OnzMill вне форума
Прохожий
 
Регистрация: 06.10.2009
Сообщения: 48
Репутация: 10
По умолчанию

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;
Admin: Пользуемся тегами!
__________________
Говори что думаешь, думай, что говоришь.
(Шоссе 60)

Последний раз редактировалось Admin, 14.01.2010 в 12:50.
Ответить с цитированием
  #4  
Старый 14.01.2010, 12:30
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Спасибо, буду разбираться
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter