Jak skopiować wszystkie pliki z płytki CD

player15

Piszę ten gotowiec, ponieważ sam niedawno miałem taki problem. Myślę, że jest on kierowany głównie do osób początkujących.

Więc do dzieła.
Po pierwsze do listu modułów dodajemy ShellApi.

CD-ROMy mają różne litery tzn. na jednym komputerze CD-ROM jest oznaczony jako D:\; na drugim jako E:\ a na jesze innym Z:\.

Musimy zatem okreslić jaką literą jest oznaczony nasz CD-ROM. Dodajemy ComboBox i ustawiamy jego właściwość Visible na false. W tym comboBoxie program wpisze literę dysku CD-ROM.

teraz w sekcji public napisz:
Drive : char; zmienna char (jeden znak)

Teraz w OnActivateFormy piszemy:

begin 
  for drive := 'A' to 'Z' do 
    case GetDriveType(PChar(Drive+':\')) of   //pobierz literę
       DRIVE_CDROM: Combobox1.items.Add(Drive);  //wynik wyświetl w ComboBox1
    end; 

Sprawę litery mamy za sobą. teraz rzecz najważniejsz czyli samo kopiowanie.
Wstaw pole Edit (w nim użytkownik poda ścieżkę, gdzie ma być skopiowany CD), oraz przycisk.

W zdarzeniu OnClick przycisku:

var 
 X : TSHFileOpStruct; 
begin 
  with R do  
    begin 
      Wnd := Handle; //  uchwyt 
      lpszProgressTitle := 'Kopiuj pliki z CD'; Tytuł 
      wFunc :=FO_COPY;// opcja kopiowania 
      pFrom := PChar(Drive + ':\\nazwa_katalogu_z_którego);  z  
      pTo := PChar(Edit1.Text);  do
      fFlags := FOF_NOCONFIRMMKDIR; Flaga. Nie wyświetlaj okna gdy dany katalog już istnieje.
end; 
SHFileOperation(R);  

To by było na tyle

9 komentarzy

A mi wywala błąd:
for drive := 'A' to 'Z' do if
GetDriveType(PChar(Drive+':'))=DRIVE_CDROM then combobox1.items.add(drive);

a czy można pobrać mając literę napędu np. F: nazwę tego napędu (tak jak to pokazuje Nero np. LG LDW-811S)

Sorry,a nie latwiej uzyc DriveComboBox z zakladki Win3.1 ?? :)

A nie mozna dac w tym comboboksie wyboru uzytkownikowi? To rozwiazuje problem wielu kompaktow :D

Trzeba wykryć napędy ;)

Dlatego nie string, bo ktoś miże mieć kilka napędów CD. I właśnie to jest błędem. Jeżeli kotś zna sposób na rozwiąznie tego niech mi przesle na e- mail to poprawię gotowiec.

nie rozumiem troche po co ten combobox (czemu nie np. string?), no ale ogolnie spoko ;]

Przecież nie ma jedenj techniki pisania programów. Owszem można inaczej ale i można zrobić tak. Poza tym najczęsciej stosowaną komendą do zamykania jest close; a można też Form1.close czy Application.Terminate.

heheheheheh zamień:

begin
for drive := 'A' to 'Z' do
case GetDriveType(PChar(Drive+':')) of // pobierz literę
DRIVE_CDROM: Combobox1.items.Add(Drive); // wynik wyświetl w ComboBox1
end;

na :
for drive := 'A' to 'Z' do if
GetDriveType(PChar(Drive+':'))=DRIVE_CDROM then combobox1.items.add(drive); <- krócej nieprawdaz?