Domingo 22 de Diciembre de 2024, 14:53
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
copiar un archivo y luego volver a usarlo
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: copiar un archivo y luego volver a usarlo (Leído 3111 veces)
kancerman
Nuevo Miembro
Mensajes: 17
copiar un archivo y luego volver a usarlo
«
en:
Jueves 3 de Marzo de 2011, 05:03 »
0
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
Tweet
gabio2
Miembro MUY activo
Mensajes: 402
Nacionalidad:
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #1 en:
Jueves 3 de Marzo de 2011, 15:27 »
0
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.
@gabio87
kancerman
Nuevo Miembro
Mensajes: 17
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #2 en:
Viernes 4 de Marzo de 2011, 07:12 »
0
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
Miembro MUY activo
Mensajes: 152
Nacionalidad:
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #3 en:
Viernes 4 de Marzo de 2011, 16:36 »
0
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
Nuevo Miembro
Mensajes: 17
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #4 en:
Domingo 6 de Marzo de 2011, 01:34 »
0
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 abro
object
doNotSaveChanges
=
Word
.
WdSaveOptions
.
wdDoNotSaveChanges
;
object
saveChanges
=
Word
.
WdSaveOptions
.
wdSaveChanges
;
System.
IO
.
File
.
Copy
(
"C:
\d
ocumentos
\p
rueba.docx"
,
"c:
\d
ocumentos
\t
emp.doc"
,
true
)
;
Word
.
Application
wordApp
=
new
Word
.
Application
(
)
;
Word
.
Document
aDoc
=
null
;
object
filename
=
"c:
\d
ocumentos
\t
emp.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:
\d
ocumentos
\t
emp.doc"
,
"c:
\d
ocumentos
\c
otizacion "
+
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
;
}
}
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
tannke
Miembro MUY activo
Mensajes: 152
Nacionalidad:
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #5 en:
Domingo 6 de Marzo de 2011, 03:30 »
0
Me alegro que resolvieras el problema. Un saludo!
gabio2
Miembro MUY activo
Mensajes: 402
Nacionalidad:
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #6 en:
Domingo 6 de Marzo de 2011, 18:35 »
0
Uff!.. los pequeños detalles son los más dificiles de ver!!.. muy bien hecho kancerman!
@gabio87
kancerman
Nuevo Miembro
Mensajes: 17
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #7 en:
Domingo 6 de Marzo de 2011, 22:13 »
0
muchas gracias he aprendido muchisimo en este foro
gerardoskype
Miembro activo
Mensajes: 50
Nacionalidad:
Re: copiar un archivo y luego volver a usarlo
«
Respuesta #8 en:
Sábado 2 de Abril de 2011, 03:25 »
0
así es, toda ruta o archivo que se utiliza debe ser liberado o limpiado para poder utilizarlo de nuevo, de lo contrario, queda en la memoria y no se puede utilizar.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
copiar un archivo y luego volver a usarlo