Wątek zablokowany 2013-12-12 19:48 przez furious programming.

Kopiowanie z CD-ROM'u

0

w OnActivate mam kodzik na wyszukanie litery cd-rom:
var
Drive : char;
begin
for drive:=<font color="blue">'A'</span> to<font color="blue">'A' 'Z' </span> do
case GetDriveType(PChar(Drive+':')) of
DRIVE_CDROM: ComboBox1.items.Add(Drive+' CD-ROM');
end;

Robię instalator i ścieżkę instalacji pisze się w edit1.

Mam też koszik na kopiowanie w button1:
var
R : TSHFileOpStruct;
begin
with R do
begin
Wnd:=Handle;
lpszProgressTitle := 'Skopiuj plik....';
wFunc:=FO_COPY;// opcja
pFrom:='c:\system.zip'; // z pliku
pTo:='c:\Windows\Pulpit\system.zip';
fFlags:=FOF_NOCONFIRMMKDIR;
end;
SHFileOperation(R);

I chcę w polu pFrom , żeby był CD-Rom więc piszę:
pFrom := PChar(ComboBox1.Text);
Chcę też w polu pTo, żeby było to co w edit1 więc piszę:
pTo := PChar(edit1.text);

Wszystko kompluje się ok. ale podczas działania programu po naciśnięciu na button1 wyskakuje błąd pierw, że Windows ni może odnaleźć pliku (a pliki są bo sprawdzałem 1200 razy), a zaraz po nim błąd Acces Voiation czy jakoś tak.

Co zrobić może kod powinien wygladać inaczej? Jak? [???] [???] [???]

0

var
R : TSHFileOpStruct;
begin
with R do

masz w var R a zaraz potem uzywasz tego R bez utworzenia. wydaje mi sie, ze powinien byc taki kod

var R: TSHFileOpStruct;
begin
R := TSHFileOpStruct.Create;
with R do...

PS. A nie mozesz kopiowac wykorzystująć CopyFile('D:\plik.zip', 'C:\plik.zip', True); ???

[Dopisane]A w jakim module jest to TSHFileOpStruct? Nie moge znalezc

[Dopisane 2]Kod powyższy nie załatwia sprawy i mi też winda wywala nie znalezienie pliku... co jest?[glowa]

0

[Dopisane]A w jakim module jest to TSHFileOpStruct? Nie moge znalezc

Nie wiem w jakim, ale ten kod pochodzi prosto z artykułów "Kopiowanie plików"

I poprosiłbym o cały kodzik jak to ma wyglądać.
Poza tym błąd jest na pewno w liniach pFrom i pTo, bo gdy wpiszę;
pFrom := 'C:Windowsxxx';
pTo := 'D:Gryxxx';
to jest wszystko OK. Ale Może sformółuje pytanie inaczej:

Jaj zrobić tak, żeby skopiować zawartość CD-Rom'u do katalogu, którego ścieżka podana jest w Edit2.

P.S
A niw moge kopiować metodą, którą proponujesz p[onieważ kopiuje ona tylko jeden plik i nie chcę kopiować tego pliku 1236x. (tyle jest plików w CD-ROM)

0

masz w var R a zaraz potem uzywasz tego R bez utworzenia. wydaje mi sie, ze powinien byc taki kod

Rekordów się nie tworzy, tylko obiekty :)

0

Witam .
Problem tkwi w formacie danych przekazywanych do zmiennej typu TSHFileOpStruct
pForm := PChar (nasza ścieżka+#0#0)

Proponuję taki kod: (w Delphi4.0 pod WIN XP pro 32bit działa)

var
S : TSHFileOpStruct;

a w treści procedury przykładowo (tu akurat kopiowanie wraz z podkatalogami):
FillChar(S, SizeOf(S),0);
S.Wnd := Handle;
S.wFunc := FO_COPY; // operacja - kopiowanie
S.pFrom := PChar(My_path+'dat\DANE*.*'+#0+#0); // z jakiego katalogu? uwaga #0#0 jest niezbędne
S.pTo := PChar(Tt_Path+'Dane'+#0+#0); // do jakiego katalogu? by nie obciął ściezki
S.fFlags := 16;
S.fAnyOperationsAborted := True; // jest mozliwosc anulowania?
S.lpszProgressTitle :=PChar('Trwa KOPIOWANIE DANYCH...'); // tekst - ale mi się nie wyswietla
b1:=SHFileOperation(S); // (wyświetla standardowe okno windowsa i kopiuje pliki) w b1 mamy wynik operacji

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