0

私のプロジェクトでは、ファイルローカルファイルにアクセスし、それを別のファイルにコピーして透かしを入れていますが、コピー中に「ファイルにアクセスできません」というIO例外が発生しています。他のプロセスは、どのボディが問題になるかを教えてくれますか

私のコードは、

  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 =@"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);
        }           
    }.
4

2 に答える 2

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
于 2013-06-04T09:08:03.933 に答える
-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;
}
于 2013-06-04T07:42:05.657 に答える