Zum Inhalt springen

SHFileOperations nur eine Datei verschieben


Fufialk

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...