2017-10-24 2 views
0

Dieser Fehler tritt auf, wenn ich die zuvor geöffnete PDF-Datei nicht schließe und erneut eine neue PDF-Datei erstelle. Ich möchte die zweite Datei öffnen, ohne die erste Datei zu schließen.Fehler bei Verwendung von iText: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird

Der Prozess kann nicht auf die Datei 'C: \ Users \ Abc \ Desktop \ Slip.pdf' zugreifen, da er von einem anderen Prozess verwendet wird.

try 
{ 
    Document pdfDoc = new Document(new iTextSharp.text.Rectangle(190f, 240f), 0f, 0f, 0f, 0f); 

    PdfWriter pdfwriter = PdfWriter.GetInstance(pdfDoc, new FileStream(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/Slip.pdf", FileMode.Create)); 
    pdfDoc.Open(); 

    PdfPTable table1 = new PdfPTable(2); 
    table1.DefaultCell.Border = 0; 
    table1.SetWidths(new int[] { 1, 6 }); 

    string imagepath = Server.MapPath("Images"); 
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagepath + "/sliplogo.png"); 
    image.ScalePercent(24f); 
    table1.AddCell(image); 

    // Text.Alignment = Element.ALIGN_CENTER; 
    Text1.Alignment = Element.ALIGN_CENTER; 
    Text.Alignment = Element.ALIGN_CENTER; 
    table1.AddCell(Text1); 
    table1.AddCell(""); 
    table1.AddCell(Text); 
    // table1.AddCell(phrase); 

    PdfPTable orderInfoTable5 = new PdfPTable(1); 
    orderInfoTable5.DefaultCell.Border = 0; 
    orderInfoTable5.AddCell("-------------------------------------"); 

    string tme = DateTime.Now.ToString("h:mm:ss tt"); 
    Paragraph Text2 = new Paragraph(tme, new Font(Font.FontFamily.TIMES_ROMAN, 8, Font.NORMAL)); 

    Paragraph Text3 = new Paragraph(DateAssign, new Font(Font.FontFamily.TIMES_ROMAN, 8, Font.NORMAL)); 

    pdfDoc.Add(table1); 
    Text2.Alignment = Element.ALIGN_RIGHT; 
    pdfDoc.Add(Text2); 

    Text3.Alignment = Element.ALIGN_RIGHT; 
    pdfDoc.Add(orderInfoTable5); 

    pdfDoc.Close(); 
    System.Diagnostics.Process.Start(Environment.GetFolderPath(
    Environment.SpecialFolder.Desktop) + "/Slip.pdf"); 
} 
catch (Exception ex) 
{ 
    Response.Write(ex.Message); 
} 
+0

wenn sie den gleichen genauen Pfad wieder öffnen. vielleicht eine Kopie erstellen, um mit der Kopie dann zu arbeiten? oder arbeite einfach im C# -Programm im RAM. –

+0

Zeigen Sie uns Ihren Code –

+0

Überprüfen Sie den Code. Ich habe den Beitrag bearbeitet. – Sufyan161

Antwort

0

aktualisiert HINWEIS auf dieser Lösung: Prüfung mit FileAccess.ReadWrite für Read-Only-Dateien fehlschlagen, so dass die Lösung mit FileAccess.Read zu überprüfen, wurde geändert. Während diese Lösung funktioniert, weil der Versuch, mit FileAccess.Read zu überprüfen, fehlschlägt, wenn die Datei über eine Schreib- oder Lesesperre verfügt, funktioniert diese Lösung jedoch nicht, wenn die Datei keine Schreib- oder Lesesperre darauf hat, dh sie wurde mit FileShare.Read oder FileShare.Write Zugriff geöffnet (zum Lesen oder Schreiben).

ORIGINAL: Ich habe diesen Code für die letzten Jahre verwendet, und ich hatte keine Probleme damit.

Verstehen Sie Ihre Bedenken über Ausnahmen verwenden, aber Sie können sie

protected virtual bool IsFileLocked(FileInfo file) 
{ 
    FileStream stream = null; 

    try 
    { 
     stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); 
    } 
    catch (IOException) 
    { 
     //the file is unavailable because it is: 
     //still being written to 
     //or being processed by another thread 
     //or does not exist (has already been processed) 
     return true; 
    } 
    finally 
    { 
     if (stream != null) 
      stream.Close(); 
    } 

    //file is not locked 
    return false; 
} 
+0

Danke für Ihre Antwort. Aber dieser Code funktioniert nur, wenn die Datei zuvor erstellt wurde. Weil Sie es in FileMode.Open geändert haben. Es wird also beim ersten Mal eine Ausnahme beim Erstellen der PDF-Datei geben. – Sufyan161

+0

Bitte überprüfen Sie den Code, den ich auf dem Post gegeben habe. – Sufyan161

+0

Wenn Datei von jemandem verwendet wird, bedeutet dies, dass es zuvor erstellt wurde. @ Sufyan161 – nikunjM

0

die ganze Zeit nicht vermeiden Sie kann nicht tun, wenn Sie die Datei offen zu halten.

können Sie versuchen, die Datei zu schließen, überschreiben und die Datei wieder in minimierten Modus können Sie nicht tun, dass

+0

Vielen Dank für Ihre Antwort. Aber ich möchte die Datei nicht schließen. Das ist kein programmatischer Ansatz. Und wenn ich die Datei schließe, dann erstelle sie, dann öffnet sie sich. Mein Problem ist, dass, wenn der Benutzer vergisst, die PDF-Datei zu schließen und auf die Schaltfläche klickt, um eine neue Datei erneut zu erstellen, dann gibt es einen Fehler. – Sufyan161

+0

Bitte überprüfen Sie den Code, den ich auf dem Post gegeben habe. – Sufyan161

Verwandte Themen