elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  no puedo borrar pdf recien creado en vb.net
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: no puedo borrar pdf recien creado en vb.net  (Leído 6,785 veces)
cbr20

Desconectado Desconectado

Mensajes: 17


Ver Perfil
no puedo borrar pdf recien creado en vb.net
« en: 31 Mayo 2013, 19:10 pm »

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


Desconectado Desconectado

Mensajes: 384



Ver Perfil WWW
Re: no puedo borrar pdf recien creado en vb.net
« Respuesta #1 en: 1 Junio 2013, 00:17 am »

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

[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.696



Ver Perfil
Re: no puedo borrar pdf recien creado en vb.net
« Respuesta #2 en: 1 Junio 2013, 09:54 am »

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


Desconectado Desconectado

Mensajes: 384



Ver Perfil WWW
Re: no puedo borrar pdf recien creado en vb.net
« Respuesta #3 en: 1 Junio 2013, 23:26 pm »

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

[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.696



Ver Perfil
Re: no puedo borrar pdf recien creado en vb.net
« Respuesta #4 en: 3 Junio 2013, 20:44 pm »

Hola

1.
Código
  1.        Dim oDirectContent As iTextSharp.text.pdf.PdfContentByte = oPdfWriter.DirectContent
  2.        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.
Código
  1.            Try
  2.                oPdfDoc.Close()
  3.                oPdfWriter.Close()
  4.            Catch ex As Exception
  5.  

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 Desconectado

Mensajes: 17


Ver Perfil
Re: no puedo borrar pdf recien creado en vb.net
« Respuesta #5 en: 6 Junio 2013, 10:16 am »

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.


Código:
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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines