Laden...

File.Copy DOCX kann nicht mehr geöffnet werden

Erstellt von Larkem vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.516 Views
L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 8 Jahren
File.Copy DOCX kann nicht mehr geöffnet werden

Hallo,

ich wollte mir ein sehr einfaches Programm schreiben, dass nur das eine Word kopiert (jeweils den letzten Eintrag), eine neue Word-Datei mit einem bestimmten Dateinamen anlegt und diese Word dann direkt öffnet.

Allerdings scheint es bei dem Kopieren ein Problem zu geben. Von ehemals 16kb bleiben nur 5kb übrig und die DOCX lässt sich nicht mehr öffnen.

Ist File.Copy der falsche Ansatz?

Der Quellcode:


 static void Main(string[] args)
        {
            string folder = Directory.GetCurrentDirectory();

            System.IO.DirectoryInfo ParentDirectory = new System.IO.DirectoryInfo(folder);

            List<string> files = new List<string>();

            foreach (System.IO.FileInfo f in ParentDirectory.GetFiles())
            {
                files.Add(f.Name);
            }

            files.Sort();

            // Vorgänger-Datei
            string pathold = Path.Combine(folder,files.Last());
            // aktuelles Datum
            DateTime aktuellesDatum = DateTime.Now;
            // neue Datei
            string pathnew = Path.Combine(folder, aktuellesDatum.ToString("yyyyMMdd") + " Besprechung.docx");

            try { 
            File.Copy(pathold, pathnew);
            }

            catch(Exception ex)
            {
                Console.WriteLine(ex);
            }

            
            try
            {
                System.Diagnostics.Process word = new System.Diagnostics.Process();
                word.EnableRaisingEvents = false;
                word.StartInfo.FileName = pathnew;
                word.Start();
            }

            catch(Exception ex2)
            {
                Console.WriteLine(ex2);
            }

            Console.ReadLine();

        }

16.830 Beiträge seit 2008
vor 8 Jahren

Genaue Fehlermeldung? Welche Zeile genau macht Probleme?
Gibt es mehr Code?

L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 8 Jahren

Hallo,

es wird keine Fehlermeldung geworfen. Das einzige was ich beobachten kann, ist die verringerte Datei-Größe.

Word wirft folgenden Fehler:> Fehlermeldung:

"Leider kann "20160328 Besprechung.docx" nicht geöffnet werden, da der Inhalt Probleme verursacht" . Der Fehler kommt unabhängig davon, ob ich die Datei per Hand öffne oder direkt vom Programm aus.

Der Code ist vollständig (abgesehen vom namespace....)

Die problematische Zeile scheint das "File.Copy" zu sein.

16.830 Beiträge seit 2008
vor 8 Jahren

File Copy nutzt im Hintergrund die gleiche Funktionalität wie das Kopieren in Deinem Windows Explorer und Rechtsklick->Kopieren.
Glaube also nicht, dass es an dieser Zeile liegt.

L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 8 Jahren

Am Pfad sollte es aber auch nicht liegen, der wird soweit korrekt erstellt. Die Word wird auch als Word mit dem richtigen Dateinamen angezeigt.

Weiß nicht, wo ich den Fehler noch suchen soll.

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo Larkem,

hast du mal probiert eine andere Datei zu kopieren und danach öffnen zu lassen? Also keine Docx-Datei?

Gruss

Coffeebean

3.825 Beiträge seit 2006
vor 8 Jahren

Was passiert wenn Du nach dem Kopieren etwas wartest ?

Oder das Öffnen der Datei weglässt ? Ist sie dann auch kleiner ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 8 Jahren

Hallo,

vielen Dank für die beiden Anstöße.
Habe beides getestet (Kopie jpeg sowie kopieren ohne starten). Leider ohne Erfolg.

Die Dateien landen immer bei 6kb. Das ist die Grundgröße eines leeren Dokuments oder?

16.830 Beiträge seit 2008
vor 8 Jahren

Nein. 6kb ist keine Grundgröße. Bei mir hat ein leeres Doc laut Win32 API 0 Bytes.

B
88 Beiträge seit 2016
vor 8 Jahren

Also ich hab das mal nachgestellt, bei mir funktioniert dein Code perfekt 🤔

"20160328 Besprechung.docx" wurde als "20160329 Besprechung.docx" kopiert und anschließend in Word (2007) geöffnet.

Beide Word Dateien, sowohl alt als auch neu, sind 89 KB groß.

Aufgefallen ist mir nur das hier:


// DirectoryInfo Objekt des MOMENTANEN Verzeichnisses
System.IO.DirectoryInfo ParentDirectory = new System.IO.DirectoryInfo(folder);

Ich betone das momentane Verzeichnis wegen dem Namen ParentDirectory wolltest du eigentlich eine Ebene höher in der Ordnerstruktur?

Du machst ja:


Path.Combine(folder,files.Last())

Ich kann mir nur vorstellen, dass du hier mit files.Last() die falsche Datei erwischt (z.B. irgendeine Exe) weil du in einem anderen Ordner bist als du dachtest und diese dann durch File.Copy selbst in .docx umbenennst, dann ist die Datei natürlich kaputt.

Ist die einzige Idee, die ich jetzt hab weil wie gesagt bei mir funktioniert das.

edit: Dafür spricht auch, dass die Datei immer 6 KB groß ist. Du erwischt bestimmt irgendeine 6 KB große Datei 😉

L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 8 Jahren

Danke Buchstabensuppe. Das war das Problem. Die Exe selbst wird kopiert. So ein dummer Fehler.

Ich hab jetzt einen Filter gesetzt:


 foreach (System.IO.FileInfo f in ActDirectory.GetFiles("*.docx"))
            {
                files.Add(f.Name);
            }

Die Bezeichnung ParentDirectory ist wirklich irreführend. Der Ordner wird aber korrekt ermittelt, weil ich Folder über GetCurrentDirectory() hole. Hab es trotzdem umbenannt.

Vielen Dank an alle!

B
88 Beiträge seit 2016
vor 8 Jahren

Bitte, gern geschehen.
Freut mich, dass ich auch mal zu einer Lösung beitragen konnte 🙂

Und dumme Fehler gibt's ja bekanntlich nicht, kann alles passieren.

Gruß

16.830 Beiträge seit 2008
vor 8 Jahren

Deswegen gibt es den Debugger, mit dem man sowas binnen Sekunden selbst herausfinden kann 😉
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

L
Larkem Themenstarter:in
9 Beiträge seit 2014
vor 8 Jahren

Ja, hab gerade einen Haltepunkt gesetzt und direkt den Fehler entdeckt (wenn ich den Filter wieder entferne). Warum ich das nicht gleich gemacht habe, kann ich auch nicht sagen 🤔