Autor
|
Tema: no puedo borrar pdf recien creado en vb.net (Leído 8,555 veces)
|
cbr20
Desconectado
Mensajes: 17
|
Pues eso señores.
Tengo una clase vb.net que le pasan rutas (en las cuales crearemos, moveremos y borraremos los archivos pdf).
Detalles: tengo dos pdf, Archivo1.pdf y Archivo2.pdf. En la carpeta NewCarpeta los tengo bien guardados. Hasta ahora bien. Empezamos con el lio. Creo otro pdf al que llamo ArchivoUnido.pdf, el cual tiene dos paginas (la pagina 1 es Archivo1.pdf, y la pagina 2 es Archivo2.pdf (solo el contenido)), asi que en la carpeta NewCarpeta tengo 3 pdf (Archivo1 y 2 y ArchivoUnido).
Una vez he realizado esta operacion de unir los pdf, lo que hago es copiar ArchivoUnido en otra ruta (Ahora tengo 4 pdf, ArchivoUnido en una ruta y ArchivoUnido,Archivo1,Archivo2 en otra ruta). En ese momento quiero borrar la carpeta donde estan Archivo1 y Archivo2, ya que no me hacen falta.
Peo al intentar borrar esa carpeta me salta un error diciendo que Archivo1 y 2 estan siendo utilizados por otro.
No se quien estara usandolos si ya ha terminado el metodo de union de pdf.
¿Podria alguien decirme como puedo borrar esa carpeta? ¿o como hacer que nadie este usando los pdf? ¿o cualquier otra sugerencia? ¿uso otra forma para unir pdf menos liosa? ¿que debo hacer?
De antemano, gracias
|
|
|
En línea
|
|
|
|
XresH
|
Con qué code estás intentando hacerlo? y vemos de repararlo o darte otro mas eficiente, ya que sin nada deberíamos hacer todo de 0 y algunos no disponemos tiempo.
Saludos.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Archivo1 y 2 estan siendo utilizados por otro.
No se quien estara usandolos si ya ha terminado el metodo de union de pdf. Te has dejado algún objeto sin liberar y es quien "está usando" los archivos, pues los mantiene abiertos en modo de lectura o escritura, ya séa un streamreader, streamwritter, stringbuilder, o lo que hayas usado en tu code para realizar "X" operación. Como ya te han dicho... si no muestras el código poco se puede hacer, pero vamos, el problema es ese, un objeto sin cerrar/liberar, pongo la mano en el fuego al 100%, la excepción que comentas lo provoca eso, así que con que le heches un repaso a tu código para añadir los "end using" o en su defecto ".close"/".dispose" debería ser más que suficiente. Salu2!
|
|
« Última modificación: 1 Junio 2013, 09:58 am por EleKtro H@cker »
|
En línea
|
|
|
|
XresH
|
Te has dejado algún objeto sin liberar y es quien "está usando" los archivos, pues los mantiene abiertos en modo de lectura o escritura, ya séa un streamreader, streamwritter, stringbuilder, o lo que hayas usado en tu code para realizar "X" operación.
Como ya te han dicho... si no muestras el código poco se puede hacer, pero vamos, el problema es ese, un objeto sin cerrar/liberar, pongo la mano en el fuego al 100%, la excepción que comentas lo provoca eso, así que con que le heches un repaso a tu código para añadir los "end using" o en su defecto ".close"/".dispose" debería ser más que suficiente.
Salu2!
Estoy de acuerdo che, sin lugar a dudas, ese error me ha pasado mil veces por esto que decis.
Saludos.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Hola 1. Dim oDirectContent As iTextSharp.text.pdf.PdfContentByte = oPdfWriter.DirectContent Dim oPdfReader As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(sInFilePath)
Cierra esos objetos cuando acabes de utilizarlos, tienen métodos para ello. 2. Try oPdfDoc.Close() oPdfWriter.Close() Catch ex As Exception
Si esos otros dos objetos fallasen al cerrarse seguirán abiertos la próxima vez que llames al sub, intenta mejorar esa parte del código, elimina el Try. Saludos!
|
|
« Última modificación: 3 Junio 2013, 20:56 pm por EleKtro H@cker »
|
En línea
|
|
|
|
cbr20
Desconectado
Mensajes: 17
|
Hey, muchas gracias. Lamento contestar a estas alturas, pero es que como casi todo lo que subo al foro es en el foro de visualBasic (despues de todo uso visualBasic.net) mo me di cuenta de que me movieron el post a este foro, y no he podido revisarlo hasta ahora, jaja. Ya lo solucione hace unos días, y era precisamente lo que decíais, tenia un reader abierto (más bien dos reader, ya que estaban en un for). En fin, de todad maneras yo adjunto el codigo, que seguro que a alguien le va a venir bien. Lo dicho, disteis en el clavo, gracias. El codigo: unir dos pdf. Imports System.IO Imports System.IO.FileStream Imports iTextSharp Imports iTextSharp.text Imports iTextSharp.text.pdf Imports iTextSharp.text.Image
Public Class UnirBorrarPdf
Public nombredelArchivo As String
'Esto no deberia estar aqui, lo puse para hacerlo global, pero el original es local Dim oPdfReader1 As iTextSharp.text.pdf.PdfReader Dim oPdfReader2 As iTextSharp.text.pdf.PdfReader
Function GetPageCount(ByVal sFolderPath As String) As Integer Dim iRet As Integer = 0 Dim oFiles As String() = Directory.GetFiles(sFolderPath)
For i As Integer = 0 To oFiles.Length - 1 Dim sFromFilePath As String = oFiles(i) Dim oFileInfo As New FileInfo(sFromFilePath) Dim sExt As String = UCase(oFileInfo.Extension).Substring(1, 3) If sExt = "PDF" Then iRet += 1 End If Next
Return iRet
End Function
Sub ProccessFolder(ByVal sFolderPath As String)
Dim bOutputfileAlreadyExists As Boolean = False Dim oFolderInfo As New System.IO.DirectoryInfo(sFolderPath) Dim sOutFilePath As String = sFolderPath + nombredelArchivo + ".pdf" 'Dim sOutFilePath As String = sFolderPath + "\" + oFolderInfo.Name + ".pdf" If System.IO.File.Exists(sOutFilePath) Then Try MessageBox.Show("Ya existe el archivo") Catch ex As Exception MessageBox.Show("Se supone que fue eliminado el archivo, pero yo no lo hice, jaja") End Try End If
Dim iPageCount As Integer = GetPageCount(sFolderPath) If iPageCount > 0 And bOutputfileAlreadyExists = False Then
Dim oFiles As String() = Directory.GetFiles(sFolderPath)
Dim oPdfDoc As New iTextSharp.text.Document() Dim oPdfWriter As PdfWriter = PdfWriter.GetInstance(oPdfDoc, New FileStream(sOutFilePath, FileMode.Create)) oPdfDoc.Open()
'LA MODIFICACION DEL FOR 'Elemento1 Dim sFromFilePath1 As String = oFiles(0) Dim oFileInfo1 As New FileInfo(sFromFilePath1) Dim sExt1 As String = UCase(oFileInfo1.Extension).Substring(1, 3) 'Elemento2 Dim sFromFilePath2 As String = oFiles(1) Dim oFileInfo2 As New FileInfo(sFromFilePath2) Dim sExt2 As String = UCase(oFileInfo2.Extension).Substring(1, 3) Try If sExt1 = "PDF" Then 'Elemento1 AddPdf1(sFromFilePath1, oPdfDoc, oPdfWriter) End If If sExt2 = "PDF" Then 'Elemento2 AddPdf2(sFromFilePath2, oPdfDoc, oPdfWriter) End If Catch ex As Exception MessageBox.Show("Ummm, algo fallo") End Try 'FIN FOR MODIFICADO
Try
Try 'mio oPdfDoc.Close() Catch ex As Exception 'mio MessageBox.Show("No se cierra el documento") 'mio End Try 'mio Try 'mio oPdfWriter.Close() Catch ex As Exception 'mio MessageBox.Show("No se cierra la escritura") 'mio End Try 'mio
Catch ex As Exception Try System.IO.File.Delete(sOutFilePath) Catch ex2 As Exception MessageBox.Show("No va tio, supuestamente esto borraba el solito, pero NO LO HACEEEEEEE") End Try End Try
oPdfDoc.Close() 'mio If (oPdfDoc.IsOpen()) Then 'mio MessageBox.Show("Esto no se cierra ni a la de tres") 'mio End If 'mio oPdfWriter.Close() 'mio End If 'mio
Dim oFolders As String() = Directory.GetDirectories(sFolderPath) For i As Integer = 0 To oFolders.Length - 1 Dim sChildFolder As String = oFolders(i) Dim iPos As Integer = sChildFolder.LastIndexOf("\") Dim sFolderName As String = sChildFolder.Substring(iPos + 1)
ProccessFolder(sChildFolder)
Next
End Sub
Sub AddPdf1(ByVal sInFilePath As String, ByRef oPdfDoc As iTextSharp.text.Document, ByVal oPdfWriter As PdfWriter)
Dim oDirectContent As iTextSharp.text.pdf.PdfContentByte = oPdfWriter.DirectContent 'Dim oPdfReader As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(sInFilePath) 'Se avisa al programador de que esta linea fue comentada para convertir la variable en global y asi poder pararla mas tarde 'supusta correccion oPdfReader1 = New iTextSharp.text.pdf.PdfReader(sInFilePath) Dim iNumberOfPages As Integer = oPdfReader1.NumberOfPages Dim iPage As Integer = 0
Do While (iPage < iNumberOfPages) iPage += 1 oPdfDoc.SetPageSize(oPdfReader1.GetPageSizeWithRotation(iPage)) oPdfDoc.NewPage()
Dim oPdfImportedPage As iTextSharp.text.pdf.PdfImportedPage = _ oPdfWriter.GetImportedPage(oPdfReader1, iPage) Dim iRotation As Integer = oPdfReader1.GetPageRotation(iPage) If (iRotation = 90) Or (iRotation = 270) Then oDirectContent.AddTemplate(oPdfImportedPage, 0, -1.0F, 1.0F, 0, 0, oPdfReader1.GetPageSizeWithRotation(iPage).Height) Else oDirectContent.AddTemplate(oPdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0) End If Loop 'mio 'oPdfReader.Close() End Sub
Sub AddPdf2(ByVal sInFilePath As String, ByRef oPdfDoc As iTextSharp.text.Document, ByVal oPdfWriter As PdfWriter)
Dim oDirectContent As iTextSharp.text.pdf.PdfContentByte = oPdfWriter.DirectContent 'Dim oPdfReader As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(sInFilePath) 'Se avisa al programador de que esta linea fue comentada para convertir la variable en global y asi poder pararla mas tarde 'supusta correccion oPdfReader2 = New iTextSharp.text.pdf.PdfReader(sInFilePath) Dim iNumberOfPages As Integer = oPdfReader2.NumberOfPages Dim iPage As Integer = 0
Do While (iPage < iNumberOfPages) iPage += 1 oPdfDoc.SetPageSize(oPdfReader2.GetPageSizeWithRotation(iPage)) oPdfDoc.NewPage()
Dim oPdfImportedPage As iTextSharp.text.pdf.PdfImportedPage = _ oPdfWriter.GetImportedPage(oPdfReader2, iPage) Dim iRotation As Integer = oPdfReader2.GetPageRotation(iPage) If (iRotation = 90) Or (iRotation = 270) Then oDirectContent.AddTemplate(oPdfImportedPage, 0, -1.0F, 1.0F, 0, 0, oPdfReader2.GetPageSizeWithRotation(iPage).Height) Else oDirectContent.AddTemplate(oPdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0) End If Loop 'mio 'oPdfReader.Close() End Sub
Public Sub btnProcess(ByVal sFromPath) If Not Directory.Exists(sFromPath) Then MsgBox("Folder does not exist") Exit Sub End If ProccessFolder(sFromPath) MessageBox.Show("Proceso terminado, asegurese de que la plicacion ha dado el resultado esperado (y compruebe que no se han borrado ni modificado documentos de por ahi)") oPdfReader1.Close() oPdfReader2.Close() End Sub
Public Sub moverPdf(ByVal ruta1, ByVal ruta2, ByVal ruta3)
FileCopy(ruta1, ruta2)
System.IO.Directory.Delete(ruta3, True) MessageBox.Show("Proceso terminado completamente") End Sub End Class Disfrutadlo, nos vemos en el foro, adioooooooooooooooooooooooos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
como puedo hacer ver codigo fuente de un programa .exe creado en visualbasic 6
Programación Visual Basic
|
arcangel_negro
|
6
|
27,934
|
21 Julio 2006, 20:26 pm
por rubeng
|
|
|
no puedo visualizar menu creado con .ASP
.NET (C#, VB.NET, ASP)
|
mundo
|
2
|
2,779
|
20 Septiembre 2007, 01:58 am
por BADBYTE-K
|
|
|
[VBS] Borrar ficheros de un directorio y dejar solamente el último creado.
Scripting
|
Sanzman
|
2
|
4,601
|
28 Mayo 2013, 08:50 am
por Sanzman
|
|
|
No puedo contestar a mi propio post creado
Sugerencias y dudas sobre el Foro
|
++c
|
2
|
3,467
|
23 Mayo 2014, 19:29 pm
por ++c
|
|
|
Este es Invector, el videojuego co-creado por el recién fallecido DJ Avicii
Noticias
|
wolfbcn
|
0
|
1,397
|
21 Abril 2018, 14:32 pm
por wolfbcn
|
|