Usuario
Eliminar archivos

Pregunta
-
Buenas tardes,
Estoy realizando una aplicacion de nombre SplitPDF que me extrae y une varios archivos pdf, esta funcion esta ok, el inconveniente lo tengo cuando voy a eliminar estos archivos para cargar otros, no me los deja eliminar, me dice que otro proceso los esta utilizando; verificando esto, me doy cuenta que es el mismo exe de la aplicaion (SplitPDF.vshost.exe o SplitPDF.exe).
Alguien me dijo que es una instancia que me los esta utilizando; de ser cierto esto, mi pregunta es, de que manera puedo matar estos procesos para poder liberar los archivos...
Este el código para adjuntar los PDF:
private bool Adjuntar()
{
var aArchivos = Directory.GetFiles(rutaDir + @"\Convert1");
var outFile = rutaDir + @"\Finales\Final.pdf";
var oPdfDoc = new Document();
var fs = new FileStream(outFile, FileMode.Create);
var oPdfWriter = PdfWriter.GetInstance(oPdfDoc, fs);
PdfImportedPage oPdfImportedPage = null;
PdfReader oPdfReader = null;
oPdfDoc.Open();
var oDirectContent = oPdfWriter.DirectContent;
try
{
foreach (var t in aArchivos)
{
oPdfReader = new PdfReader(t);
var iNumberOfPages = oPdfReader.NumberOfPages;
var iPage = 0;
var dirArchivo = t.Split('\\');
if (iNumberOfPages > 1)
{
if (dirArchivo[dirArchivo.Length - 1] != "1.pdf")
{
if (MessageBox.Show(
"El archivo " + dirArchivo[dirArchivo.Length - 1] + " tiene mas de una pagina; desea seleccionar alguna?",
"Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
var objpagina = new Pagina();
objpagina.ShowDialog(this);
}
}
}
while (iPage < iNumberOfPages)
{
iPage += 1;
if (page > 1)
{
oPdfDoc.SetPageSize(oPdfReader.GetPageSizeWithRotation(page));
oPdfDoc.NewPage();
oPdfImportedPage = oPdfWriter.GetImportedPage(oPdfReader, page);
var iRotation = oPdfReader.GetPageRotation(page);
if (iRotation == 90 || iRotation == 270)
{
oDirectContent.AddTemplate(oPdfImportedPage, 0, -1.0F, 1.0F, 0, 0, oPdfReader.GetPageSizeWithRotation(page).Height);
}
else
{
oDirectContent.AddTemplate(oPdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0);
}
page = 0;
break;
}
else
{
oPdfDoc.SetPageSize(oPdfReader.GetPageSizeWithRotation(iPage));
oPdfDoc.NewPage();
oPdfImportedPage = oPdfWriter.GetImportedPage(oPdfReader, iPage);
var iRotation = oPdfReader.GetPageRotation(iPage);
if (iRotation == 90 || iRotation == 270)
{
oDirectContent.AddTemplate(oPdfImportedPage, 0, -1.0F, 1.0F, 0, 0, oPdfReader.GetPageSizeWithRotation(iPage).Height);
}
else
{
oDirectContent.AddTemplate(oPdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0);
}
}
}
}
//oPdfWriter.Close();
oPdfDoc.Dispose();
oPdfDoc.Close();
if (oPdfReader != null)
{
oPdfReader.Dispose();
oPdfReader.Close();
}
//fs.Flush();
fs.Dispose();
fs.Close();
oDirectContent.ClosePath();
if (oPdfImportedPage != null) oPdfImportedPage.ClosePath();
return true;
}
catch (Exception e)
{
return false;
}
}Este es el código que tengo para eliminar:
foreach (var subfolder in directoryInfo.GetDirectories())
{
foreach (var a in subfolder.GetFiles())
{
var objProcesses = Process.GetProcessesByName("SplitPDF");
foreach (var objProcess in objProcesses)
{
objProcess.CloseMainWindow();
objProcess.WaitForExit();
}
a.Delete();
}
}Gracias
- Editado Josep22 viernes, 17 de mayo de 2013 12:51
Todas las respuestas
-
Hola Jose,
Has realizando un kill ????
Process.Kill() : http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill.aspx
Por cierto no entiendo muy bien... quieres matarte a ti mismo????, asegurate que estas liberando los recursos que estas generando con las API... la instancia de PDFWriter la estas disposenado?
Estas son las que tienes que liberar, no tu aplicacion...
Danicuco - 2013