Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

software_quebrador.de.arquivos

Esse Software foi desenvolvido para resolver problemas de manuseio de arquivos, arquivos muitos grandes podem ser quebrados em vários pedaços e depois podem ser unidos com o "Quebrador de Arquivos"

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

pascal
copie os arquivos da pasta LinuxX64/bin para a pasta: 
    /opt
de permiss??o: 
    sudo chmod +x QuebradordeArquivos
depois o inicie pelo terminal: 
    /opt/QuebradordeArquivos

pascal
 C??digo Fonte:
 
{ +--------------------------------------------------------------------------------
  Esse Software foi escrito por romerito morais no RAD Studio Delphi Rio 10.3.3
  linkedIn: https://www.linkedin.com/in/romeritomorais/
  +-------------------------------------------------------------------------------- }

unit Principal;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
  FMX.Menus, FMX.StdCtrls, FMX.Edit, FMX.Controls.Presentation, FMX.ListBox,
  FMX.ComboEdit, FMX.Effects, FMX.Filter.Effects, FMX.Objects, FMX.EditBox,
  FMX.ComboTrackBar;

type
  TFMXForm = class(TForm)
    OpenFile: TOpenDialog;
    EditSize: TEdit;
    EditCaminho: TEdit;
    Procurar: TSearchEditButton;
    SaveFiles: TSaveDialog;
    Layout1: TLayout;
    Layout2: TLayout;
    Layout3: TLayout;
    ComboTipo: TComboEdit;
    Layout4: TLayout;
    TextSize: TText;
    RecLayout: TRectangle;
    Layout6: TLayout;
    ShadowEffect1: TShadowEffect;
    ShadowEffect2: TShadowEffect;
    Layout5: TLayout;
    Rectangle1: TRectangle;
    ShadowEffect3: TShadowEffect;
    TextExec: TText;
    RecConfirmacao: TRectangle;
    Layout7: TLayout;
    Layout8: TLayout;
    Layout9: TLayout;
    Rectangle2: TRectangle;
    TextResult: TText;
    TextMensagem: TText;
    Layout10: TLayout;
    TextTime: TText;
    ShadowEffect4: TShadowEffect;
    procedure FormCreate(Sender: TObject);
    procedure ComboTipoChange(Sender: TObject);
    procedure ProcurarClick(Sender: TObject);
    procedure TextExecClick(Sender: TObject);
    procedure TextResultClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);

  private
    { Private declarations }
  public
    fTempo: Ttime;
    fMomento: integer;
    { Public declarations }
  end;

var
  FMXForm: TFMXForm;

implementation

{$R *.fmx}

uses Linux.Utils;

const
  OneKB = 1024;
  OneMB = OneKB * OneKB;
  OneGB = OneKB * OneMB;
  OneTB = Int64(OneKB) * OneGB;

type
  TByteStringFormat = (bsfDefault, bsfBytes, bsfKB, bsfMB, bsfGB, bsfTB);

var
  BashLine, SelectDir: String;
  BashResult: TStringList;

  { funcção para medir o tamamho do arquivo selecionado }
function TamanhoArquivo(Arquivo: string): integer;
begin
  with TFileStream.Create(Arquivo, fmOpenRead or fmShareExclusive) do
    try
      Result := Size;
    finally
      Free;
    end;
end;

{ função que verifica se o diretório esta vazio ou não }
function ValidaDiretorio(Dir: string): Boolean;
var
  SR: TSearchRec;
  I: integer;
begin
  Result := False;
  FindFirst(IncludeTrailingPathDelimiter(Dir) + '*', faAnyFile, SR);
  for I := 1 to 2 do
    if (SR.Name = '.') or (SR.Name = '..') then
      Result := FindNext(SR) <> 0;
  FindClose(SR);
end;

{ função que retorna o tamanho do arquivo em em kib, mib, gib etc.... }
function FormatByteString(Bytes: UInt64;
  Format: TByteStringFormat = bsfDefault): string;
begin
  if Format = bsfDefault then
  begin
    if Bytes < OneKB then
    begin
      Format := bsfBytes;
    end
    else if Bytes < OneMB then
    begin
      Format := bsfKB;
    end
    else if Bytes < OneGB then
    begin
      Format := bsfMB;
    end
    else if Bytes < OneTB then
    begin
      Format := bsfGB;
    end
    else
    begin
      Format := bsfTB;
    end;
  end;

  case Format of
    bsfBytes:
      Result := System.SysUtils.Format('%d bytes', [Bytes]);
    bsfKB:
      Result := System.SysUtils.Format('%.1n KB', [Bytes / OneKB]);
    bsfMB:
      Result := System.SysUtils.Format('%.1n MB', [Bytes / OneMB]);
    bsfGB:
      Result := System.SysUtils.Format('%.1n GB', [Bytes / OneGB]);
    bsfTB:
      Result := System.SysUtils.Format('%.1n TB', [Bytes / OneTB]);
  end;
end;

procedure TFMXForm.ProcurarClick(Sender: TObject);
begin
  if ComboTipo.Text = 'quebrar arquivos' then
  begin
    EditSize.Text := '';
    EditSize.TextPrompt := 'exemplo: 10';
    OpenFile.Execute;
    EditCaminho.Text := OpenFile.FileName;
    EditCaminho.selstart := Length(EditCaminho.Text);
    SelectDirectory('Selecione o Diretorio de Saída do Arquivos', '',
      SelectDir);
    TextSize.Text := 'tamanho do aquivo selecionado: ' +
      FormatByteString(TamanhoArquivo(EditCaminho.Text));
    EditSize.SetFocus;
  end
  else
  begin
    EditSize.Text := '';
    EditSize.TextPrompt := 'exemplo: arquivo.zip';
    SelectDirectory('Selecione o Diretorio', '', SelectDir);
    EditCaminho.Text := SelectDir;
    EditSize.SetFocus;
  end;

end;

procedure TFMXForm.TextResultClick(Sender: TObject);
begin
  RecConfirmacao.Visible := False;
end;

procedure TFMXForm.TextExecClick(Sender: TObject);
begin
  TextExec.Enabled:=False;
  if ComboTipo.Text = 'quebrar arquivos' then
  begin
    if (EditCaminho.Text = '') or (EditSize.Text = '') then
    begin
      RecConfirmacao.Visible := True;
      TextMensagem.Text := 'Antes de Executar Preencha Todos os Campos';
    end
    else
    begin

      BashLine := 'split -d --number=' + EditSize.Text + ' ' + EditCaminho.Text
        + ' ' + SelectDir + '/part_';
      BashResult := TLinuxUtils.RunCommandLine(BashLine);
      RecConfirmacao.Visible := True;
      TextMensagem.Text := 'O arquivo quebrado em ' + EditSize.Text +
        ' pedaços se encontra nesse diretório ' + SelectDir + '';
      TextExec.Enabled:=True;
    end;

  end
  else
  begin
    if DirectoryExists(SelectDir) then
    begin
      if ValidaDiretorio(SelectDir) then
        ShowMessage('Diretório esta vazio')
      else
      begin
        BashLine := 'cd ' + SelectDir + '; cat part_ * > ' + EditSize.Text +
          '; echo -e "+ Arquivo unidos com Software "Quebrador Binário"\n+ Desenvolvido por Romerito:\n+ linkedIn: https://www.linkedin.com/in/romeritomorais/\n+ mail:    Romeritomorais@outlook.com.br" > Leia-me.txt';
        BashResult := TLinuxUtils.RunCommandLine(BashLine);
        RecConfirmacao.Visible := True;
        TextMensagem.Text := ' O Arquivo Unido ' + EditSize.Text +
          ' se encontra em ' + SelectDir;
      end;

    end

  end;
  TextExec.Enabled:=True;
end;

procedure TFMXForm.ComboTipoChange(Sender: TObject);
begin
  if ComboTipo.Text = 'quebrar arquivos' then
  begin
    if EditCaminho.Text = '' then
    begin
      EditCaminho.Text := '';
      EditCaminho.TextPrompt := 'selecione o arquivo';
      EditSize.TextPrompt := 'exemplo: 10';
      TextSize.Text := '';
    end
    else
    begin
      EditCaminho.TextPrompt := 'selecione o arquivo';
      EditSize.Text := 'exemplo: dados.zip';
      TextSize.Text := FormatByteString(TamanhoArquivo(EditCaminho.Text));
    end;
  end
  else
  begin
    EditCaminho.Text := '';
    EditCaminho.SetFocus;
    EditCaminho.TextPrompt := 'selecione a pasta com os arquivos';
    EditSize.TextPrompt := 'exemplo: dados.zip';
    TextSize.Text := '';
  end

end;

procedure TFMXForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  EditCaminho.Text := '';
  EditSize.Text := '';
  BashResult.Clear;
  TextMensagem.Text := '';
  SelectDir := '';
end;

procedure TFMXForm.FormCreate(Sender: TObject);
begin
  BashResult := TStringList.Create;
  OpenFile.Filter :=
    'Todos (*.*)|*.*|Arquivos Texto (*.txt)|*.TXT|Arquivos Python (*.py)|*.PY|Arquivos ISO (*.iso)|*.ISO|Arquivos CSV (*.csv)|*.CSV|Arquivos XLS (*.xls)|*.XLS|Arquivos Zip (*.zip)|*.ZIP|Arquivos Rar (*.rar)|*.RAR';
end;

procedure TFMXForm.FormShow(Sender: TObject);
begin
//  Timer1.enabled := False;
end;

end.