2013-06-04 23 views
0

在我的项目中,我正在访问文件本地文件并将其复制到另一个文件,然后为其添加水印,但在复制时,我得到IO Exception “不能访问文件”我确信,该​​文件是免费的,而不是由任何其他进程访问的任何机构可以告诉我会是什么问题是进程无法访问文件“ Path”,因为它正在被一些其他进程使用

我的代码,

protected void AddWaterMark(string file) 
    { 
     string watermark = "Confidential Document Printed on " + DateTime.Now.ToString(); 
     const int emSize = 40; 
     try 
     { 
      // Get a fresh copy of the sample PDF file 
      string filename = @"E:\Rajesh_Kumar\Application\Valuation\ExamManagement\ExamManagement\FileUpload\"+file; 
      string filename1 [email protected]"E:\Rajesh_Kumar\Application\Valuation\ExamManagement\ExamManagement\FileUpload\" + file; ; 
      bool b = true;// File_lock(filename); 
      if(b==true) 
      { 
       File.Copy(Path.Combine(@"E:\Rajesh_Kumar\Application\Valuation\ExamManagement\ExamManagement\FileUpload", 
       filename), Path.Combine(@"E:\Rajesh_Kumar\Application\Valuation\ExamManagement\ExamManagement\UFileUpload ", 
       filename1), true); //Exception was Thrown Here 
      // Create the font for drawing the watermark 
      XFont font = new XFont("Times New Roman", emSize, XFontStyle.BoldItalic); 
      // Open an existing document for editing and loop through its pages 
      PdfDocument document = PdfReader.Open(filename); 
      // Set version to PDF 1.4 (Acrobat 5) because we use transparency. 
      if (document.Version < 14) 
       document.Version = 14; 
      for (int idx = 0; idx < document.Pages.Count; idx++) 
      { 
       //if (idx == 1) break; 
       PdfPage page = document.Pages[idx]; 
       // Variation 1: Draw watermark as text string 
       // Get an XGraphics object for drawing beneath the existing content 
       XGraphics gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend); 
       // Get the size (in point) of the text 
       XSize size = gfx.MeasureString(watermark, font); 
       // Define a rotation transformation at the center of the page 
       gfx.TranslateTransform(page.Width/2, page.Height/2); 
       gfx.RotateTransform(-Math.Atan(page.Height/page.Width) * 180/Math.PI); 
       gfx.TranslateTransform(-page.Width/2, -page.Height/2); 
       // Create a string format 
       XStringFormat format = new XStringFormat(); 
       format.Alignment = XStringAlignment.Near; 
       format.LineAlignment = XLineAlignment.Near; 
       // Create a dimmed red brush 
       XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0)); 
       // Draw the string 
       gfx.DrawString(watermark, font, brush, 
        new XPoint((page.Width - size.Width)/2, (page.Height - size.Height)/2),format); 
      } 
      // Save the document... 
      document.Save(filename); 
      // ...and start a viewer 
      Process.Start(filename); 
      File.Exists(filename); 
      } 
     } 
     catch(Exception ex) 
     { 
      ClientMessaging(ex.Message); 
     }   
    }. 
+3

您的输入和输出文件名称是相同的。 – Igarioshka

+0

@lgarioshka如果我尝试使用不同的文件名发生同样的异常,当我评论File.Copy行并且执行程序时,它正在正确运行添加水印但不创建新文件 – Rajesh

+1

如果将另一个文件名传递给文档.Save(文件名);以便它将处理的文档保存到另一个路径? – Igarioshka

回答

2

的问题是,你正试图将文件复制到自身,并试图重写文件的过程中

File.Copy("TextFile1.txt", "TextFile1.txt", true); //throws the error: "The process cannot access the file 'TextFile1.txt' because it is being used by another process." 
File.Copy("TextFile1.txt", "TextFile2.txt", true); //copies the file 
+0

@ lagarioshka Same问题我已经通过重命名'string filename1 = @“E:\ Rajesh_Kumar \ Application \ Valuation \ ExamManagement \ ExamManagement \ FileUpload \ New_”+ file; – Rajesh

-1

我以前一直在那里,也许你可以尝试这样做:

public bool FileIsLocked(string strFullFileName) 
{ 
    bool blnReturn = false; 
    System.IO.FileStream fs = null; 

    try { 
     fs = System.IO.File.Open(strFullFileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Read, System.IO.FileShare.None); 
     fs.Close(); 
    } catch (System.IO.IOException ex) { 
     blnReturn = true; 
    } 

    return blnReturn; 
} 
相关问题