Dzielenie plikow

0

Mam problem :) Mianowicie pisze aplikacje, ktora bedzie dzielic pliki mam 2 formy :)

  1. aplikacja dzielaca
  2. Wybierz folder....;

Gdy chce podzielic plik wywala mi blad:
http://images1.fotosik.pl/261/8ee3bd9b95c3b785med.png

Unit1:

procedure TForm1.DivFile(const FileName: String);
var
  Input : TFileStream;
  Output : TFileStream;
  i : Integer;
  DirPath : String;
  BuffSize : Integer;
begin
  BuffSize:= (TrackBar1.Position * 1024 * 1024 * 1) ; // pobierz rozmiar bufora ( rozmiar jednego pliku )
  DirPath:= Edit1.Text;
  Input:= TFileStream.Create(FileName, fmOpenRead);
  try
    ProgressBar1.Max := (Input.Size div BuffSize);
    for I := 0 to (Input.Size div BuffSize) do
    begin
      Application.ProcessMessages;
      ProgressBar1.Position := i;
      Input.Seek(i * BuffSize, soFromBeginning);
      Output := TFileStream.Create((DirPath + '\' + ExtractFileName(FileName) + IntToStr(i) + '.a4u'), fmCreate);
      try
        if (Input.Size - (i * BuffSize)) < BuffSize then
          Output.CopyFrom(Input, (Input.Size - (i * BuffSize)))
        else Output.CopyFrom(Input, BuffSize);
      finally
        Output.Free;
      end;
    end;
  finally
    Input.Free;
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
   size : integer;
begin
   OpenDialog1.Execute;
   AssignFile(plik, OpenDialog1.FileName);
   Reset(plik, 1); // otwórz plik
   Target.Text:= OpenDialog1.FileName;
   OpenDialog1.Free;
   size:= FileSize(plik);
   size:= size div 1024 div 1024 div 1;
   Rozmiar.Caption:= ('~ ' + IntToStr(size) + ' MB');
   Rozmiar.Font.Color:= clGreen;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
   Bufor.Caption := 'Bufor: ' + IntToStr(TrackBar1.Position * 1024 * 1024 * 1) + ' bajtów';
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
   DivFile(Target.Text);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
   Form2.Show;
end;

Unit2:

procedure TForm2.BitBtn3Click(Sender: TObject);
begin
   Form2.Hide;
end;

procedure TForm2.DriveComboBox1Change(Sender: TObject);
begin
   DriveComboBox1.DirList:= DirectoryListBox1;
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
   mkdir('Segmenty');
   showmessage('Folder został utworzony!');
   DirectoryListBox1.Update;
end;

procedure TForm2.DirectoryListBox1Change(Sender: TObject);
begin
   DirPath:= DirectoryListBox1.Directory;
   Label2.Caption:= DirPath;
end;

procedure TForm2.BitBtn2Click(Sender: TObject);
begin
    DirPath:= DirectoryListBox1.Directory;
    DirectoryListBox1.Update;
    Form1.Edit1.Text:= DirPath;
    Form2.Hide;
end;

end.

Pomozcie.... :-) Co robic? [!!!]

0

zainstaluj program Unlocker. Jest często bardzo pomocny :)

0

Linię nr 11 zamień na

Input:= TFileStream.Create(FileName, fmOpenReadWrite);
0

Uporalem sie z tym problemem mianowicie :

procedure TForm1.Button5Click(Sender: TObject);
var
   size : integer;
begin
   OpenDialog1.Execute;
   AssignFile(plik, OpenDialog1.FileName);
   Reset(plik, 1); // otwórz plik
   Target.Text:= OpenDialog1.FileName;
   OpenDialog1.Free;
   size:= FileSize(plik);
   size:= size div 1024 div 1024 div 1;
   Rozmiar.Caption:= ('~ ' + IntToStr(size) + ' MB');
   Rozmiar.Font.Color:= clGreen;
end;

Zapomnialem zamknac pliku :-)

CloseFile(plik);
0

Dlaczego 2 razy otwierasz plik?

Najpierw kodem:

AssignFile(plik, OpenDialog1.FileName);
Reset(plik, 1);

...a później:

Input:= TFileStream.Create(FileName, fmOpenRead);
0

Dzieki Patyk! To samo wymyslilem :-)

Mam jeszcze jedno pytanie:

Jak zrobic, aby po nacinieciu buttonu zaznaczalo wszystkie zawarte w nim wartosci?

kodzik:

procedure TForm1.DivFile(const FileName: String);
var
  Input : TFileStream;
  Output : TFileStream;
  i : Integer;
  DirPath : String;
  BuffSize : Integer;
begin
  BuffSize:= (TrackBar1.Position * 1024 * 1024 * 1) ; // pobierz rozmiar bufora ( rozmiar jednego pliku )
  DirPath:= Edit1.Text;
  Input:= TFileStream.Create(FileName, fmOpenRead);
  try
    ProgressBar1.Max := (Input.Size div BuffSize);
    for I := 0 to (Input.Size div BuffSize) do
    begin
      Application.ProcessMessages;
      ProgressBar1.Position := i;
      Input.Seek(i * BuffSize, soFromBeginning);
      Output := TFileStream.Create((DirPath + '\' + ExtractFileName(FileName) + IntToStr(i) + '.a4u'), fmCreate);
     CheckListBox1.Items.Add(ExtractFileName(FileName) + IntToStr(i) + '.a4u');
      try
        if (Input.Size - (i * BuffSize)) < BuffSize then
          Output.CopyFrom(Input, (Input.Size - (i * BuffSize)))
        else Output.CopyFrom(Input, BuffSize);
      finally
        Output.Free;
      end;
    end;
  finally
    Input.Free;
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1