Rajesh
Rajesh

Reputation: 1620

Process Cannot Access the file "\Path" because it is being used by some other process

In my Project I am accessing a file local file and copying it to another file then watermarking it, but while copying I am getting the IO Exception “Can’t Access the file” I am sure that the file is free and not accessed by any other process can any body tell me what would be the problem is

My code is,

  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);
        }           
    }.

Upvotes: 0

Views: 5090

Answers (2)

Igarioshka
Igarioshka

Reputation: 677

The problem is that you are trying to copy the file to itself and trying to override the file in the process

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

Upvotes: 2

Sabilv
Sabilv

Reputation: 600

I've been there before, maybe you could try to do this :

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;
}

Upvotes: -1

Related Questions