CLR: .Net / Mono / Boo / Otros CLR > C#
copiar un archivo y luego volver a usarlo
kancerman:
necesito copiar un archivo y luego volver a ocuparlo , utilizo el siguiente codigo
System.IO.File.Copy("C:\documentos\temp.doc", "c:\documentos\cotizacion " + TB_Nombre_Cotizacion_Nueva.Text + ".doc", true);
pero al tratar de volver a ocupar el archivo creado osea el "c:\documentos\cotizacion " + TB_Nombre_Cotizacion_Nueva.Text + ".doc"
me sale un error que el archivo esta en uso por otro proceso es como que la aplicacion lo deja lockeado
ojala puedan ayudarme
gracias
gabio2:
Seria de mucha ayuda que pongas el código completo de esa sección... para ver como lo tienes hecho y así darte una mejor respuesta, no olvides comentar la linea donde ocurre dicho error.. saludos. :)
kancerman:
disculpa por no responder antes esto es mas o menos lo que tengo necesito editar un documento word y luego en viarlo por mail
//copio el docuemnto original a uno temporal y lo abro
object doNotSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
object saveChanges = Word.WdSaveOptions.wdSaveChanges;
System.IO.File.Copy("C:\documentos\prueba.docx", "c:\documentos\temp.doc", true);
Word.Application wordApp = new Word.Application();
Word.Document aDoc = null;
object filename = "c:\documentos\temp.doc";
//edito el documento
if (System.IO.File.Exists((string)filename))
{
object readOnly = false;
object isVisible = false;
aDoc = wordApp.Documents.Open(ref filename, ref readOnly, ref isVisible);
aDoc.Activate();
this.FindAndReplace(wordApp, "<fecha>", dateTimePicker1.Text);
this.FindAndReplace(wordApp, "<nombre>", TB_Nombre_Cotizacion_Nueva.Text.Trim());
this.FindAndReplace(wordApp, "<tipo_evento>", CB_tipo_evento_Cotizacion_Nueva.Text.Trim());
this.FindAndReplace(wordApp, "<precio>", TB_Precio_Cotizacion_Nueva.Text.Trim());
aDoc.Save();
//cierro el documento
((Word._Document)aDoc).Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(aDoc);
}
else
{
MessageBox.Show("El archivo no existe.", "No Existe", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//copio el temporal a uno final que sera el que se envia
System.IO.File.Copy("C:\documentos\temp.doc", "c:\documentos\cotizacion " + TB_Nombre_Cotizacion_Nueva.Text + ".doc", true);
//envio el documento
Enviar(TB_Enviar_Cotizacion_Nueva.Text);
//esta es metodo para enviar
public static bool Enviar(string a)
{
string PathFile = @"c:\documentos\"+TB_Nombre_Cotizacion_Nueva.Text +".doc";
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(a);
msg.From = new MailAddress("luisbazanmontana@gmail.com", "", System.Text.Encoding.UTF8);
msg.SubjectEncoding = Encoding.UTF8;
msg.Subject = "Cotizacion";
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = "Mensaje del correo";
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
Attachment Data = new Attachment(PathFile);
msg.Attachments.Add(Data);
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("micorreo@gmail.com", "mipass");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
MessageBox.Show("Se ha enviado exitosamente ");
return true;
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show("No se mando"+ex, "No Existe", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
}
el error lo tira cuando intento enviar por segunda vez el archivo, la primera vez que lo envio no da problemas pero si lo intento enviar una segunda vez se cae la aplicacion
gracias por responder
tannke:
Muy buenas, contesto sin saber mucho de este tema, nunca me he centrado mucho en el envio de correo salvo alguna ocasión concreta y sencilla. Bueno, has provado con un msg.Dispose();
Por otro lado, que no se si afecta o no, pero yo pensaba que si, donde declaras este "string".
--- Código: C# ---string PathFile = @"c:\documentos\"+TB_Nombre_Cotizacion_Nueva.Text +".doc"; estas poniendo la "@" y a la vez las \. Al colocar la "@" solo es necesario poner una barra.
Otra cosa cuando publiques codigo intenta ponerlo con la opcion Code, seleccionando C#, es que asi se hace muy dificil leerlo.
Un saludo
kancerman:
hola gracias por responder y de ahora en adelante voy a poner el codigo como corresponde, le elimine los slash dobles pero el problema continua
--- Código: C# --- //copio el docuemnto original a uno temporal y lo abroobject doNotSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;object saveChanges = Word.WdSaveOptions.wdSaveChanges;System.IO.File.Copy("C:\documentos\prueba.docx", "c:\documentos\temp.doc", true);Word.Application wordApp = new Word.Application();Word.Document aDoc = null;object filename = "c:\documentos\temp.doc"; //edito el documentoif (System.IO.File.Exists((string)filename)){object readOnly = false;object isVisible = false;aDoc = wordApp.Documents.Open(ref filename, ref readOnly, ref isVisible);aDoc.Activate();this.FindAndReplace(wordApp, "<fecha>", dateTimePicker1.Text);this.FindAndReplace(wordApp, "<nombre>", TB_Nombre_Cotizacion_Nueva.Text.Trim());this.FindAndReplace(wordApp, "<tipo_evento>", CB_tipo_evento_Cotizacion_Nueva.Text.Trim());this.FindAndReplace(wordApp, "<precio>", TB_Precio_Cotizacion_Nueva.Text.Trim());aDoc.Save();//cierro el documento((Word._Document)aDoc).Close();System.Runtime.InteropServices.Marshal.ReleaseComObject(aDoc); }else{MessageBox.Show("El archivo no existe.", "No Existe", MessageBoxButtons.OK, MessageBoxIcon.Information); }//copio el temporal a uno final que sera el que se enviaSystem.IO.File.Copy("C:\documentos\temp.doc", "c:\documentos\cotizacion " + TB_Nombre_Cotizacion_Nueva.Text + ".doc", true);//envio el documentoEnviar(TB_Enviar_Cotizacion_Nueva.Text); //esta es metodo para enviarpublic static bool Enviar(string a){ string PathFile = @"c:\documentos\"+TB_Nombre_Cotizacion_Nueva.Text +".doc";System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); msg.To.Add(a); msg.From = new MailAddress("luisbazanmontana@gmail.com", "", System.Text.Encoding.UTF8);msg.SubjectEncoding = Encoding.UTF8; msg.Subject = "Cotizacion"; msg.SubjectEncoding = System.Text.Encoding.UTF8; msg.Body = "Mensaje del correo"; msg.BodyEncoding = System.Text.Encoding.UTF8; msg.IsBodyHtml = false; Attachment Data = new Attachment(PathFile); msg.Attachments.Add(Data); SmtpClient client = new SmtpClient(); client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("micorreo@gmail.com", "mipass"); client.Port = 587; client.Host = "smtp.gmail.com"; client.EnableSsl = true; try{ client.Send(msg);MessageBox.Show("Se ha enviado exitosamente ");return true;}catch (System.Net.Mail.SmtpException ex){MessageBox.Show("No se mando"+ex, "No Existe", MessageBoxButtons.OK, MessageBoxIcon.Information);return false;}}
EDIT: ya lo arregle gracias a todos los que me ayudaron
por si a alguien le ocurre lo mismo esta fue la solucion
al crear el attachment data este obviamente ocupaba el pathfile osea el archivo doc por lo tanto una vez enviado habia que agregar una linea liberandolo quedaria asi
--- Código: C# --- client.Send(msg);MessageBox.Show("Se ha enviado exitosamente ");return true;Data.Dispose(); //<----- linea agregada que soluciona el problema
Navegación
[#] Página Siguiente
Ir a la versión completa