Dateien verschieben Alternative
-
Hallo, ich suche eine Alternativlösung um Dateien mit C/C++ zu verschieben. MoveFile() möchte ich nicht benutzen, da es nicht einwandfrei zu funktionieren scheint, vor allem bei .zip o.ä. Dateiarten. Falls es sogar eine extra Funktion dafür im BCB gibt, kann die auch genannt werden, da ich mit dem BCB arbeite, aber eine andere WINAPI oder C Funktion wäre auch okay.
-
MoveFileEx?
-
Das kommt doch auf's selbe raus...
-
Wie genau äußert sich dieses "funktioniert nicht einwandfrei"?
PS: Ich hätte da noch ShFileOperation() oder rename() anzubieten.
-
rename() kann doch aber keine Dateien verschieben oder?
Ich bin nun schon etwas weiter, ich hab mir mal den ErrorCode ausgeben lassen und entweder ist das File nach Code schon vorhanden oder das File/Zielverzeichnis konnte nicht gefunden werden.
Komischerweise funktioniert das ganze mit einer .rar Datei, eine .zip Datei allerdings wird nicht verschoben und liefert Error Code 2 ...
Ich denk mal es hängt mit dem Pfad zusammen, den ich einlese, denn der ist dann noch in der Form D:\bla\bla
-
Ich denke da hast du bei dir irgendnen Fehler drin

Achso:
msdn schrieb:
The one caveat is that the MoveFile function will fail on directory moves when the destination is on a different volume.
-
Ne ne, darauf hab ich schon acht gegeben.
Ich geb euch einfach mal ein Beispiel:
AnsiString alt = "\\"; AnsiString neu = "\\\\"; OrigPfadEdited = StringReplace(DirectoryListBox1->Directory, alt, neu, TReplaceFlags() << rfReplaceAll); ZielPart1Zip = "D:\\Neuer Ordner\\"; PfadZip = "\\*.zip"; OrigPfadSucheZip = DirectoryListBox1->Directory + PfadZip; SuchPfadStringZip = OrigPfadSucheZip.c_str (); ZielZip = ZielPart1Zip + FDataZip.cFileName; ZielStringZip = ZielZip.c_str (); hSearchZip = FindFirstFile(SuchPfadStringZip,&FDataZip); OrigPfadfiledZip = OrigPfadEdited + neu + FDataZip.cFileName; OriginalPfadZip = OrigPfadfiledZip.c_str (); ZipCheck = true; Edit1->Text = OriginalPfadZip;und eben
if(RarCheck) { if(MoveFileEx (OriginalPfadRar, ZielStringRar, MOVEFILE_WRITE_THROUGH)) { Edit1->Text = "Funzte!"; }else { Edit1->Text = GetLastError(); } }else if(ZipCheck) { MoveFileEx (OriginalPfadZip, ZielStringZip, MOVEFILE_WRITE_THROUGH); }else { MessageBox (NULL, "Kein Dateityp ausgewählt", "Fehler", MB_OK); }Bitte keine grundlegenden Sachen beurteilen, ich wollte natürlich noch Variablen die ich nicht brauche rausnehmen, deshalb ist auch alles ein bisschen schwierig zu lesen.
-
OrigPfadEdited = StringReplace(DirectoryListBox1->Directory, alt, neu, TReplaceFlags() << rfReplaceAll);Unnötig / Falsch
-
Kam mir auch falsch vor das zu machen, da es bei .rar auch ohne funktioniert, aber ich wollte alles ausprobieren. Für .rar sieht der Code kaum anders aus, es klappt aber auch nur bei wenigen .rars.
AnsiString Füller = "\\"; ZielPart1Rar = "D:\\FR\\"; PfadRar = "\\*.rar"; OrigPfadSucheRar = DirectoryListBox1->Directory + PfadRar; SuchPfadStringRar = OrigPfadSucheRar.c_str (); ZielRar = ZielPart1Rar + FDataRar.cFileName; ZielStringRar = ZielRar.c_str (); hSearchRar = FindFirstFile(SuchPfadStringRar,&FDataRar); OrigPfadfiledRar = DirectoryListBox1->Directory + Füller + FDataRar.cFileName; OriginalPfadRar = OrigPfadfiledRar.c_str (); RarCheck = true; Edit1->Text = OriginalPfadRar;Edit: So passts jetzt bei den .rars zumindest.
Edit: So funktioniert soweit jetzt alles, danke.