Newsgroup: it.comp.lang.delphi
Titolo: Errore durante la copia di una cartella

 
Mi spiegate una cosa?
Se faccio CopyFolder('C:\pippo\','D:\pippo\'); funziona
invece se faccio CopyFolder(Edit2.Text,Edit3.Text); non mi funziona
eppure
Edit2.Text = 'C:\pippo\' ;
Edit3.Text = 'D:\pippo\' ;
La funzione CopyFolder che uso è la seguente:
function CopyFolder(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom := PChar(fromDir + #0);
    pTo := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;
L'errore che mi da è il seguente:
"Impossibile copiare File: Imposibile leggere dal file o dal disco di
Origine."
Come mai mi succede questo?
Vincenzo Di Falco
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

    pFrom := PChar(fromDir + #0);
Perché questo + #0 ?
-- 
Jax 

 ha scritto nel messaggio 
news:84Z222Z188Z33Y...@usenet.libero.it...


 Ho tolto sia
+ #0 come ha detto JAX e
Const come hai detto tu ma l'errore esce sempre, non riesco proprio a capire
da cosa dipende.
Vincenzo Di Falco.


 Vincenzo Di Falco.
Ciao, prova così:
procedure EseguiCopia(Sender: TObject; cCartella, cDest: String);
var
  Fo      : TSHFileOpStruct;
  buffer  : array[0..4096] of char;
  p       : pchar;
begin
   FillChar(Buffer, sizeof(Buffer), #0);
   p := @buffer;
   p := StrECopy(p, pChar(cCartella)) + 1;
   //p := StrECopy(p, 'C:\DownLoad\2.ZIP') + 1;
   //p := StrECopy(p, 'C:\DownLoad\3.ZIP') + 1;
   //StrECopy(p, 'C:\DownLoad\4.ZIP');
   FillChar(Fo, sizeof(Fo), #0);
   Fo.Wnd    := Handle;
   Fo.wFunc  := FO_COPY;
   Fo.pFrom  := @Buffer;
   Fo.pTo    := pChar(cDest); //'C:\WINDOWS\TEMP';
   Fo.fFlags := FOF_NOCONFIRMATION;	//0;
   if ((SHFileOperation(Fo) <> 0) or
       (Fo.fAnyOperationsAborted <> false)) then
     ShowMessage('Cancelled')
end;
Ciao
Micky
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:84Z222Z234Z177Y...@usenet.libero.it...


 invece se faccio CopyFolder(Edit2.Text,Edit3.Text); non mi funziona
text non è una stringa ma una PROPERTy di tipo string.
prova cosi':
var
  Source, Dest: string;
begin
  Source := edit1.text;
  Dest := edit2.text
CopyFolder(Source, Dest);
...
Alcuni appunti....
1) dai nomi SENSATI agli oggetti
tra 2 secondi ti sarai gia dimenticato cosa contiene edit1 e cosa edit2
2) Assegna un valore a result.
Se la funzione va in errore chissa cosa ti torna indietro....
3) Restituire un boolean nel tuo caso è limitativo.
ShFileOperation non ti da un boolean.
facendo come fai tu sai CHE QUALCOSA NON HA FUNZIONATO, ma non sai
PERCHE' non ha funzionato.
Io la riscriverei in questo modo:
function CopyFolder(const fromDir, toDir: string, var AErrorCode:
integer): Boolean;
var
  fos: TSHFileOpStruct;
begin
  RESULT := FALSE;
  AERRORDCODE := -1;
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom := PChar(fromDir + #0);
    pTo := PChar(toDir)
  end;
  AErrorCode := ShFileOperation(fos);
   Result := (0 = AErrorCode);
end;
In questo modo, se restituisce false hai il codice dell'errore
restituito da ShFileOperation e puoi scrivere del codice che, in base
ad esso, mostra un messaggio CHIARO, che l'utente possa capire senza
essere costretto a chiamarti:
  msg := 'Copia eseguita!';
  if Not CopyFolder(a,b, errorcode) then
  begin
      case ErrorCode of
          xx: msg := 'Spazio su disco destinazione insufficiente';
          ...
      end;
  end;
  ShowMessage(Msg);
..
AS
AS

Con immenso di spiacere vi comunico che ho eseguito tutte le procedure che
mi avete dato ma il risultato non è cambiato, mi esce sempre il solito
messaggio di errore
          "Impossibile copiare File: Imposibile leggere dal file o dal disco di
Origine."
Non so più cosa fare. Sarà un problema del mio PC?
