Reputation: 1620
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
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
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