Fufialk Geschrieben 14. März 2008 Geschrieben 14. März 2008 Hallo habe folgendes Problem mit SHFileOptions: Ich übergebe mehrere Dateien an mein Programm, die der Reihe nach abgearbeitet werden sollen. Nach der Bearbeitung sollen diese dann zwecks Archivierung abgelegt werden. Das ganze sieht so aus: int main(int argc, const char* argv[]) { for (f = 1; f < argc; f++) { // Unterscheidung der Feldtests anhand der Dateierweiterung const char* find = strrchr(argv[f], '.'); //letztes "." finden strncpy(endung,find+1, 3); //alles ab "." kopieren und endung zuweisen if ( strcmp ( endung , "MVD" ) == 0 ) //MVV Datenfile feldtest = 1; else if (.......) feldtest = 2; ....... //Aufruf der unterprozeduren für die Bearbeitung und Umwandlung der einzelnen Messfiles switch (feldtest) { case 1 : cout << "\nMVV Datendatei\n"; if (mvv_dfile(argv[f]) == true) //Aufruf der Funktion bool mvv_dfile (Überprüfung auf Vorhandensein der Datei) { mvv_dat (argv[f]); //Aufruf der Unterfunktion mvv_dat (eigentliche Datenumwandlung) }; //if mkdir(rohdaten); // Erstellen des Ordners 'Rohdaten' chdir(rohdaten); // Wechsel in den Ordner Rohdaten getcwd(verzeichnis,sizeof(verzeichnis)); // ermitteln des aktuellen Verzeichnisses //Aus C++ Referenz Kopieren der Rohdatendatei in den entsprechenden //Ordner (SPF\Jahr\KW_WW\Meldung\Rohdaten) und anschließendes Löschen aus Tempverzeichniß) memset(&fos, 0, sizeof(fos)); // SHFILEOPSTRUCT mit nullen füllen fos.wFunc = FO_MOVE; // Kopieroperation auswählen fos.pFrom = argv[f]; // Ausgangsparameter (Welche Datei soll kopiert werden?) fos.pTo = verzeichnis; // Zielparameter (Wohin soll die Datei kopiert werden?) fos.fFlags = FOF_ALLOWUNDO; // Flags für Rückgängigmachen SHFileOperation(&fos); // Operation ausführen cout << "\nDie Datei " << argv[f] << " wurde in das Verzeichnis " << verzeichnis << " verschoben."; break; case 2 : ....... break; default : cout << "\nEs handelt sich nicht um ein Messfile!\n"; break; } // switch } // for cout << "\nAlle uebergebenen Messfiles wurden verarbeitet.\a"; cout << "\nBeendigung mit Tastendruck."; getch(); } // end main Das Problem Dabei ist, daß nicht nur die Datei argv[f] verschoben wird, sondern alle Dateien, die sich im selben Ordner befinden. Zitieren
Klotzkopp Geschrieben 14. März 2008 Geschrieben 14. März 2008 pFrom und pTo brauchen eine doppelte Nullterminierung. Zitieren
Fufialk Geschrieben 14. März 2008 Autor Geschrieben 14. März 2008 pFrom und pTo brauchen eine doppelte Nullterminierung. Also über eine Temporäre Übergabe? CString tempfrom = argv[f]; path.Format("%s%c", tempfrom, 0); CString tempto = verzeichnis; path.Format("%s%c", tempto, 0); und dann weiter: memset(&fos, 0, sizeof(fos)); fos.wFunc = FO_MOVE; fos.pFrom = tempf; fos.pTo = tempto; fos.fFlags = FOF_ALLOWUNDO | FOF_FILESONLY; SHFileOperation(&fos); Zitieren
Fufialk Geschrieben 14. März 2008 Autor Geschrieben 14. März 2008 Ist eigentlich auch so etwas zulässig, um eine Nullterminierung durchzuführen? getcwd(verzeichnis,sizeof(verzeichnis)); strcat(verzeichnis, "\0\0"); Zitieren
Klotzkopp Geschrieben 14. März 2008 Geschrieben 14. März 2008 Zulässig ist es sicher, nur funktionieren wird es nicht. strcat stößt sofort auf eine Terminierung, tut hier also gar nichts. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.