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.
Klotzkopp Geschrieben 14. März 2008 Geschrieben 14. März 2008 pFrom und pTo brauchen eine doppelte Nullterminierung.
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);
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");
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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden