Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Разрезать и соединить файлы

Delphi , Файловая система , Файлы

Разрезать и соединить файлы


{
  Parameters: 

  FileToSplit: Specify a file to split. 
  SizeofFiles: Specify the size of the files you want to split to (in bytes) 
  Progressbar: Specify a TProgressBar to show the splitting progress 

  Result: 
  SplitFile() will create files  FileName.001, FileName.002, FileName.003 and so on 
  that are SizeofFiles bytes in size. 
 } 

function SplitFile(FileName : TFileName; SizeofFiles : Integer;
ProgressBar : TProgressBar) : Boolean;
var
  i : Word; 
  fs, sStream: TFileStream; 
  SplitFileName: String; 
begin
  ProgressBar.Position := 0; 
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); 
  try 
    for i := 1 to Trunc(fs.Size / SizeofFiles) + 1 do 
    begin 
      SplitFileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i)); 
      sStream := TFileStream.Create(SplitFileName, fmCreate or fmShareExclusive); 
      try 
        if fs.Size - fs.Position < SizeofFiles then 
          SizeofFiles := fs.Size - fs.Position; 
        sStream.CopyFrom(fs, SizeofFiles); 
        ProgressBar.Position := Round((fs.Position / fs.Size) * 100); 
      finally 
        sStream.Free; 
      end; 
    end; 
  finally 
    fs.Free; 
  end; 

end; 

// Combine files / Dateien zusammenfьhren 

{ 
  Parameters: 

  FileName: Specify the first piece of the splitted files 
  CombinedFileName: Specify the combined file name. (the output file) 

  Result: 
  CombineFiles() will create one large file from the pieces 
 } 

function CombineFiles(FileName, CombinedFileName : TFileName) : Boolean; 
var 
  i: integer; 
  fs, sStream: TFileStream; 
  filenameOrg: String; 
begin 
  i := 1; 
  fs := TFileStream.Create(CombinedFileName, fmCreate or fmShareExclusive); 
  try 
    while FileExists(FileName) do 
    begin 
      sStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); 
      try 
        fs.CopyFrom(sStream, 0); 
      finally 
        sStream.Free; 
      end; 
      Inc(i); 
      FileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i)); 
    end; 
  finally 
    fs.Free; 
  end; 
end; 

// Examples: 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SplitFile('C:\temp\FileToSplit.chm',1000000, ProgressBar1); 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
  CombineFiles('C:\temp\FileToSplit.001','H:\temp\FileToSplit.chm'); 
end;

Привет! Я переведу контент на русский язык.

Функция SplitFile() Эта функция принимает три параметра:

  • FileName: имя файла, который нужно разбить.
  • SizeofFiles: размер в байтах каждого кусочка файла.
  • ProgressBar: контроллер прогресс-бара для отображения процесса разделения.

Функция создает объект TFileStream (fs) и открывает указанный файл для чтения. Затем она проходит по файлу, делив его на более мелкие части в соответствии с параметром SizeofFiles. Каждая часть сохраняется как новый файл с расширением в формате "FileName.001", "FileName.002" и т.д.

Прогресс-бар обновляется после создания каждой части.

Функция CombineFiles() Эта функция принимает два параметра:

  • FileName: имя первого куска разделенных файлов.
  • CombinedFileName: имя выходного файла, который будет скомбинирован из всех частей.

Функция создает объект TFileStream (fs) и открывает указанный выходной файл для записи. Затем она проходит по каждому куску файла, читая его из оригинального местоположения и копируя в выходной файл.

Пример использования В примере, когда кнопка Button1 нажата, функция SplitFile() вызывается с параметрами 'C:\temp\filetosplit.chn', 1000000 и ProgressBar1. Это разбивает файл на части размером 1000000 байт каждая. Когда кнопка Button2 нажата, функция CombineFiles() вызывается с параметрами 'C:\temp\FileToSplit.001' и 'H:\temp\filetosplit.chn'. Это комбинирует все разделенные файлы обратно в одиночный файл в указанном выходном месте.

Альтернативное решение Вместо использования прогресс-бара для отображения процесса разделения, можно использовать болееadvanced метод, например, отображение сообщения статуса или процента выполнения. Например:

ProgressBar1.Position := Round((fs.Position / fs.Size) * 100);
Label1.Caption := 'Разделение файла... ' + FormatFloat('0', (fs.Position / fs.Size) * 100) + '%';

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

Пособие для разрезания и соединения файлов в программировании на Delphi, с помощью функций SplitFile и CombineFiles, которые позволяют разбить большой файл на более мелкие и объединить их обратно.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 20:03:47/0.0036959648132324/0