Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SHFileOperation - Kopiervorgang nicht erfolgreich
Dr.Z
myCSharp.de - Member

Avatar #avatar-2603.jpg


Dabei seit:
Beiträge: 93
Herkunft: Nettetal

Themenstarter:

SHFileOperation - Kopiervorgang nicht erfolgreich

beantworten | zitieren | melden

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:
Fehler
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
private Nachricht | Beiträge des Benutzers
husky410
myCSharp.de - Member

Avatar #avatar-1712.jpeg


Dabei seit:
Beiträge: 229
Herkunft: Ruhrgebiet

beantworten | zitieren | melden

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

codeproject.com-Suche nach copy with progress
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2354

beantworten | zitieren | melden

Der Fehler ist in Hexadezimal 0x402. Dieser besagt:
Fehler
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:
Fehler
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.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Dr.Z
myCSharp.de - Member

Avatar #avatar-2603.jpg


Dabei seit:
Beiträge: 93
Herkunft: Nettetal

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers