Autor Beitrag
Muffi
Hält's aus hier
Beiträge: 14

Win XP Prof
Delphi 4-7
BeitragVerfasst: Do 09.10.03 15:56 
:wink: Einmal noch heute, dann is auch gut

Nutze in meinem selbsterstellten Tool eine Funktion mir der man ein Dialogfeld einblendet und dort ein Verzeichnis auswählen kann (SelectDirectory usw.). Jetzt dachte ich das Programm wäre fertig, da fängt es bei der Feinoptimierung erst so richtig an. :roll:

Das Programm kopiert Text-Dateien von J:\Schwipp nach J:\Schwupp (Pfade vorher per obiger Funktion ausgewählt und heißen wirklich so). Es läuft perfekt. Es läuft automatisch. Kann nicht besser sein. Endlich kein rumkopiere mehr.
Aber jetzt:
J: ist ein großes Verzeichnis mit ca 40 Unterverzeichnissen. Naja und um nicht immer beim Verzeichnis auswählen an der Laufleiste zu schrauben habe ich die Verzeichnisse im Windows-Explorer per F2 in J:\aSchwipp und J:\aSchwupp umbenannt. Damit sie oben stehen. 8)

Wenn ich das Programm jetzt starte kommt die folgenden Fehlermeldung
bei jedem Verschiebeversuch (die Ordner habe ich natürlich neu ausgewählt):

Die Datei kann nicht verschoben werden: Die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden

Hääähhh :shock: :shock: :shock:

Wenn ich das Verzeichnis wieder umbenenne, läuft alles wieder super. 8)

Ich bin ratlos :cry:
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Do 09.10.03 16:41 
Hast Du vielleicht die Verzeichnisnamen mal zu Testzwechen hard gecodet und diese Stellen nicht wieder korrigiert?

barfuesser
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Do 09.10.03 16:47 
hast du die namen der verzeichnisse irgendwo fest im dem code implementiert (const) sodas er sich jetzt nicht mehr findet ?
Zitat:

Wenn ich das Verzeichnis wieder umbenenne, läuft alles wieder super.

hört sich nämlich so an :)

_________________
mfg
Tana´Ri
Muffi Threadstarter
Hält's aus hier
Beiträge: 14

Win XP Prof
Delphi 4-7
BeitragVerfasst: Fr 10.10.03 13:22 
:? :? :?

Also ich habe mir den Quelltext jetzt bestimmt schon 8-mal angeschaut um zu sehen woran es liegen könnte. Ich find nix. Ist auch nirgends im Quelltext als Konstante oder so angegeben.

Das einzige was es sein könnte (ratlos)
wäre die Zuweisung bei SHFileOperation.

Man weist ja dabei per z.B. F.pFrom das Quellverzeichnis zu.
Da diese meines Wissens vom Typ PChar ist habe ich das Verzeichnis so zugewiesen. Wobei Verzeichnisvariable ein String ist

F.pFrom:=pchar(Verzeichnisvariable)

_________________
I love Emoticons. I love them deadly.
If I write a thread I let them out of my box.
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Fr 10.10.03 14:04 
Versuch mal aus J:\aSchwipp und J:\aSchwupp ein
J:\ASchwipp und J:\ASchwupp zu machen! Vielleicht bringt das ja was

Gruss Andi

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Muffi Threadstarter
Hält's aus hier
Beiträge: 14

Win XP Prof
Delphi 4-7
BeitragVerfasst: Sa 11.10.03 00:41 
Das hat auch nix gebracht. :bawling:

Hier mal der auf das wesentliche gekürzte Sourcecode:

QFolder = QuellFolder
DFolder = DestinationFolder
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
x:=0;
dir:=QFolder+'\*.txt';
Attr:=faAnyFile;

if findFirst(dir,Attr,SR)=0 then
  begin
    if (SR.Attr and Attr) = SR.Attr then
      begin
        X:=X+1;
        DSatz(.X.):=SR.Name;
      end;
    while FindNext(SR)=0 do
      begin
        if (SR.Attr and Attr) = SR.Attr then
          begin
            X:=X+1;
            DSatz(.X.):=SR.Name;
          end;
      end;
    FindClose(SR);
  end;
     F.Wnd:=Handle;
     F.wFunc:=FO_Move;
     QF:=QFolder+'\*.txt';
     pQFolder:=pChar(QF);
     F.pFrom:=pQfolder;
     DF:=DFolder+'\';
     pDFolder:=pChar(DF);
     F.pTo:=pDFolder;
     F.fFlags:=FOF_RenameOnCollision or FOF_NoConfirmation;
     if SHFileOperation(F)<>0 then ShowMessage('Copy Failed');
  end;

Hundert Augen sehen mehr als zwei :)

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
I love Emoticons. I love them deadly.
If I write a thread I let them out of my box.
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Mo 13.10.03 08:46 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
x:=0
dir:=QFolder+'\*.txt'
Attr:=faAnyFile; 

if findFirst(dir,Attr,SR)=0 then 
 try
  repeat
   if (SR.Attr and Attr) = SR.Attr then
    begin 
        X:=X+1
        DSatz(.X.):=SR.Name; 
    end;
  until FindNext(SR) <> 0
 finally
   FindClose(SR); 
 end
 
     F.Wnd:=Handle; 
     F.wFunc:=FO_Move;
 
     QF:=QFolder+'\*.txt'
     pQFolder:=pChar(QF)+#0
     F.pFrom:=pQfolder; 
     DF:=DFolder+'\'
     pDFolder:=pChar(DF)+#0
     F.pTo:=pDFolder; 

     F.fFlags:=FOF_RenameOnCollision or FOF_NoConfirmation; 
     if SHFileOperation(F)<>0 then ShowMessage('Copy Failed'); 

  end;


zur erläuterung: du kannst be SHFileOperation_struct bei pTo & pFrom mehrere (nicht relative) Pfade angeben (zu Files oder Directories), pFrom kann mit * kombiniert werden. um aber der verarbeitenden funktion das ende deine Pfadangaben zu signalisieren muss eine doppelte NUll-terminierung erfolen. ein PChar also ein NUll-terminierter String muss einfach noch ne Null (#0) terminierung angehängt werden.
Wahrscheinlich wars das ;)

_________________
mfg
Tana´Ri
Muffi Threadstarter
Hält's aus hier
Beiträge: 14

Win XP Prof
Delphi 4-7
BeitragVerfasst: Mo 13.10.03 12:17 
Ne Ne Ne, funktioniert alles nicht. :autsch:

Ich hab jetzt den Quellcode erst mal extra gesichert und werde es später noch mal versuchen (mir raucht der Kopf).

Sollte jemand noch ne Idee haben kann er natürlich noch mal posten.

Werde es jetzt mal mit Copy/Move/Rename/Delete.. -File versuchen ob der gleiche Fehler auftaucht. :roll: :roll:

Werde euch dann ggf. berichten, wenn ich des Rätsels Lösung weiß.

_________________
I love Emoticons. I love them deadly.
If I write a thread I let them out of my box.
Muffi Threadstarter
Hält's aus hier
Beiträge: 14

Win XP Prof
Delphi 4-7
BeitragVerfasst: Do 16.10.03 09:53 
Was lange währt .....

Juchuuuu es klappelt :dance:

Wollte mich doch noch nicht so schnell geschlagen geben. Hab´s noch mal probiert und es funktioniert (endlich).

Tana´Ri hatte recht (Danke noch mal). Es lag (auch) an der doppelten Nullung (#0). :angel:

Zusätzlich hatte ich aber auch eine Schleife um das ganze Konstrukt gebaut, die aber falsch angelegt war und immer den letzten Eintrag nicht erfasste. :eyecrazy:

Also Repeat...until in while...do umfunktioniert, Schleifeneingangsbedingung geändert und einer Flasche Bier als Belohnung stand nix mehr im Wege... :mrgreen: :mrgreen:

:!: Kleiner Tip:

Als ich das Programm dann in mehreren Varianten getestet habe mit verschiedenen Dateien, in verschiedenen Ordnern usw. wurden plötzlich Dateien kopiert, die ich zwar kannte aber überhaupt nicht im Explorer auftauchten.
Und auch Funktionen die die Dateienanzahl eines Verzeichnisses anzeigen sollten bzw deren Speicherkapazität schienen scheinbar nicht zu funktionieren. Bis der erlösende Geistesblitz kam. Mit FindFirst, FindNext werden auch versteckte Dateien erfaßt. Also kleine Abfrage eingesetzt und Problem gelöst.

_________________
I love Emoticons. I love them deadly.
If I write a thread I let them out of my box.
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Do 16.10.03 10:23 
soviel viel ich weiss werden die mit findfirst ... gefundenen dateien auch in ihrer physikalischen Ordnung gefunden -> d.h. nicht alphabetisch oder dergleichen sonder in der Speicherrangfolge (wenn mans mal so nennen darf) ;)

_________________
mfg
Tana´Ri