Laden...

SHFileOperation - Kopiervorgang nicht erfolgreich

Erstellt von Dr.Z vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.906 Views
Dr.Z Themenstarter:in
88 Beiträge seit 2007
vor 12 Jahren
SHFileOperation - Kopiervorgang nicht erfolgreich

Hallo zusammen,

ich möchte ein paar Dateien von \ServerA\Fraigabe\ nach \ServerB\Freigabe\ kopieren.
Bisher habe ich das immer mit File.Copy gelöst und dies funktioniert auch Einwandfrei.
Da ich gerne eine Kopier-Fortschritsanzeige für die aktuelle Datei hätte, habe ich auf die Klasse ShellProvider von inflames2k zurückgegriffen.

Nur bekomme ich immer die Fehlermeldung, die schon in diesem Beitrag
SHFileOperation kopiert nicht von CD-Laufwerk:> Fehlermeldung:

Datei kann nicht kopiert werden: Die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden.

Die Beiträge in diesem Thread konnten mein Problem bisher nicht lösen

Mein Programm ist so aufgebaut, dass ich auf ServerA die zu kopierenden / zu verschiebenden Dateien suche und erst in ein tmp-Verzeichnis (auf ServerB) kopieren will und von dort in das entsprechende Zielverzeichnis (ebenfalls auf ServerB) verschieben möchte.

Die folgende Methode läuft in einem Thread, damit die GUI nicht hängt:


public void Move()
        {
            bool moved = true;
            DirectoryInfo di = Directory.GetParent(destination);
            string tempPath = di.FullName;

            string[] temp = new string[files.Length];

            try
            {
                for (int i = 0; i < files.Length; i++)
                {
                    // - Dateien aus Backup in tmp-Verzeichnis kopieren.
                    PreCopy(files[i]);
                    temp[i] = Path.Combine(tempPath, Path.GetFileName(files[i])); 
                    tempPath += files[i];
                    MyShellProvider.Copy(files[i], temp[i], true);
                    //File.Copy(files[i], temp[i], true);
                    tempPath = di.FullName;
                    CopiedOne();
                }

                for (int i = 0; i < temp.Length; i++)
                {
                    // - Dateien aus tmp-Verzeichnis in entsprechendes Zielverzeichnis kopieren.
                    PreMove(files[i]);
                    string DestPath =Path.Combine(destination, Path.GetFileName(files[i]));
                    MyShellProvider.Move(temp[i], DestPath, true);
                    //File.Move(temp[i], DestPath);
                    MovedOne();
                }
            }
            catch (Exception ex)
            {
                moved = false;
                errorMessage = ex.Message;
            }

            MovedAll(moved);
            //return moved;
        }

Den Fehler liefert mir schon die ShellProvider-Klasse - zum einen mit der obigen Fehlermeldung, zum anderen ist der Rückgabewert dieser Methode

private int RunFileOperation(string sSource, string sDestination, FO_Func func, FILEOP_FLAGS_ENUM flags)

in der ShellProviderKlasse 1026.

Hat jemand eine Idee, wo das Problem liegen kann?
Vielen Dank für eure Hilfe und Mühe. 😃

Dr. Z

225 Beiträge seit 2005
vor 12 Jahren

Den Fehler finde ich zwar nicht, aber hier sind einige andere Beispiele zur Lösung:

codeproject.com-Suche nach copy with progress

2.298 Beiträge seit 2010
vor 12 Jahren

Der Fehler ist in Hexadezimal 0x402. Dieser besagt:

Fehlermeldung:
An unknown error occurred. This is typically due to an invalid path in the source or destination. This error does not occur on Windows Vista and later.

Ich habe jetzt einfach mal versucht eine Datei von meinem NAS auf die lokale Festplatte zu kopieren. Bei mir (Unter Windows 7 Ultimate) poppt eine Meldung auf, das mit folgendem Text:

Fehlermeldung:
Der Ordner \ ist nicht vorhanden. Die Datei wurde möglicherweise verschoben oder gelöscht.

Möchten Sie ihn erstellen?

Ich gehe davon aus, SHFileOperation damit nicht klar kommt, das die Datei auf einem externen System liegt. Hast du die Möglichkeit, ServerA und ServerB als Netzlaufwerke einzubinden?

BTW: Welches Betriebssystem nutzt du? Aus Using SHFileOperation: Cannot identify what error is occuring entnehme ich, das ab Windows Vista IFileOperation verwendet werden sollte anstatt SHFileOperation.

Ich habe jetzt noch einmal alle Methoden der Klasse durchprobiert. Sie scheinen alle Unter Windows 7 nicht zu funktionieren.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

Dr.Z Themenstarter:in
88 Beiträge seit 2007
vor 12 Jahren

Hallo zusammen,

erst einmal Danke für eure Antworten.
@husky410: Werde ich mir mal angucken, vllt ist eine Lösung dabei, die mir entgegenkommt.
@inflames2k:
Entwicklungssystem als auch späteres Zielsystem sind Windows XP.
Die Möglichkeit die Server als Netzlaufwerk einzubinden besteht. Da ich mir die Pfade aber aus einer Datenbank hole, finde ich das irgendwie "unsauber" - oder nicht?