none
Freigabe einer Datei nach PdfSharp Anwendung RRS feed

  • Frage

  • Hallo zusammen,

    beim Einfügen einer bmp in ein PDF-File wird eine die Hilfdatei  Datei1 nicht freigegeben um sie löschen zu können.

                ...

    if (!File.Exists(Datei1)) { File.Create(Datei1).Close(); } if (!File.Exists(Datei2)) { File.Create(Datei2).Close(); } RenderTargetBitmap bmp = new RenderTargetBitmap((int)1250 , (int)750, 96, 96, PixelFormats.Pbgra32); bmp.Render(SummaryFenster); //var image = bmp; using (var fileStream = new FileStream(Datei1, FileMode.Open, FileAccess.Write)) { BitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); encoder.Save(fileStream); fileStream.Close(); fileStream.Dispose(); } PdfDocument doc = new PdfDocument(); doc.Pages.Add(page = new PdfPage()); page.Size = PageSize.Size10x14; page.Orientation = PageOrientation.Landscape; XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]); XImage img2 = XImage.FromFile(Datei1); xgr.DrawImage(img2, 0, 0); doc.Save(Datei2); doc.Close(); doc.Dispose(); img2.Dispose(); xgr.Dispose(); File.Delete(Datei1);

    Frage was kann ich da tun, was fehlt noch?

    fileStream ist nicht die Ursache.

    Danke und Grüße

    Carl-Heinz

    Dienstag, 14. Februar 2017 15:46

Antworten

Alle Antworten

  • Hallo Carl-Heinz,

    Gibt es eine Änderung, wenn Du diese Zeilen entfernst?

                    fileStream.Close();
                    fileStream.Dispose();

    Die using-Anweisung übernimmt das Verwerfen der Objekte, die IDisposable implementieren. Da Du using verwendest, sind somit die notwendigen Vorkehrungen getroffen. Ich führe den relevanten Auszug aus dem MSDN-Artikel an:

    Die using-Anweisung ruft die Dispose-Methode für das Objekt auf die richtige Weise auf und (bei Verwendung wie oben gezeigt) verursacht, dass das Objekt seinen Gültigkeitsbereich verlässt, sobald Dispose aufgerufen wird. Innerhalb des using-Blocks ist das Objekt schreibgeschützt und kann nicht geändert oder neu zugewiesen werden.

    Sieh Dir auch Konrads Erklärung in diesem Thread an:
    Help with the C# using statment

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 16. Februar 2017 07:02
    Moderator
  • Hi Ditmar,

    Danke für die Antwort.

    Wie ich herausgefunden habe liegt das Problem nicht in dem fileStream sondern an

     XImage img2 = XImage.FromFile(Datei1);

    diese PdfShape-WPF.dll Routine gibt die Datei offensichtlich nicht frei und ich habe bis jetzt nicht herausgefunden welcher Prozess das ist um ihn ggf. zu killen.

    Kannst Du mir da weiterhelfen?

    viele Grüße

    Carl-Heinz

    Donnerstag, 16. Februar 2017 09:19
  • Hallo Carl-Heinz,

    scheint wohl ein Bug in der WPF Variante zu sein.

      http://stackoverflow.com/questions/28807920/how-to-delete-file-after-using-ximage-fromfile

    Dort findest Du auch zwei Links zu möglichen Lösungen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 16. Februar 2017 09:51
  • Hi Stefan,

    danke für die Links.

    Ich würde gerne die PdfShape-WPF.dll ändern, aber wie.

    Gibt es da einen Editor?

    Ich habe schon Versuche mit JetBrains dotPeek gemacht, kann den Code sehen aber noch nicht  ändern.

    Gruß

    Carl-Heinz

    Donnerstag, 16. Februar 2017 18:50
  • Hi Stefan,

    Dein Hinweis war der Richtige, danke.

    Nach Neuistallation über NuGet tritt der Fehler nicht mehr auf.

    viele Grüße

    Carl-Heinz

    Freitag, 17. Februar 2017 08:59