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();
}
Genaue Fehlermeldung? Welche Zeile genau macht Probleme?
Gibt es mehr Code?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
Hallo Larkem,
hast du mal probiert eine andere Datei zu kopieren und danach öffnen zu lassen? Also keine Docx-Datei?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
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?
Nein. 6kb ist keine Grundgröße. Bei mir hat ein leeres Doc laut Win32 API 0 Bytes.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 😉
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!
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ß
Deswegen gibt es den Debugger, mit dem man sowas binnen Sekunden selbst herausfinden kann 😉
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 🤔