Zum Inhalt springen

SHFileOperations nur eine Datei verschieben


Empfohlene Beiträge

Geschrieben

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.

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

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...