Veröffentlicht 14. März 200817 j 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.
14. März 200817 j Autor 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);
14. März 200817 j Autor Ist eigentlich auch so etwas zulässig, um eine Nullterminierung durchzuführen? getcwd(verzeichnis,sizeof(verzeichnis)); strcat(verzeichnis, "\0\0");
14. März 200817 j Zulässig ist es sicher, nur funktionieren wird es nicht. strcat stößt sofort auf eine Terminierung, tut hier also gar nichts.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.