none
Reportes guardados en "C:\User\Documents\[Carpeta del Proyecto]\" al crear el setup RRS feed

  • Pregunta

  • feliz dia.

    tengo la siguiente linea de codigo en para guardar un ReportViewer de Visual Studio

    File.WriteAllBytes("C:\Users\jole_\Desktop\Sora Ximena\Sora\Documentos\FacturaComprobanteAcuerdoP\" & txt_prueba.Text & ".pdf", ReportViewer1.LocalReport.Render("PDF"))
     

    y utilizo la herramienta Visual Studio Installer/Setup Project  para crear el instalador

    como hago para que los reportes me queden en una carpeta creada por el instalador? 


    JorgeLeonardoDC

    jueves, 24 de agosto de 2017 20:41

Respuestas

  • Hola:

     Puedes hacer que el instalador cree el directorio al momento de hacer el deploy de tus archivos, pero, ¿Que pasaría si por error alguien elimina la carpeta?, si no validas la existencia previa del mismo antes de querer utilizarla recibirás una bonita Exception, el uso del Application.StartupPath me parece muy atinado solo que debes de prevenir el escenario comentado, entonces siguiendo ese camino te sugeriría validar la existencia del directorio antes y en caso de que no exista crearlo para posteriormente utilizarlo: 

           If(Not System.IO.Directory.Exists(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP")))Then
                System.IO.Directory.CreateDirectory(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP"))
            Else
                System.IO.File.WriteAllBytes(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP", "nombreArchivo.pdf"), ReportViewer1.LocalReport.Render("PDF"))
            End If

     Te explico:

     La condición IF valida la existencia de la carpeta "FacturaComprobanteAcuerdoP" justo a un lado del archivo que inicio la ejecución por medio del método Exists de la clase Directory.

    El uso del Método Combine de la clase path, es para formar un path valido, su uso evita estar concatenando separadores a diestra y siniestra.

     El uso de la propiedad StartupPath de la clase Application, es para obtener la ruta de acceso de archivo ejecutable que inicio la aplicación, esta propiedad es muy útil para temas como el que nos tiene aquí platicando.

     Analiza lo comentado, lee la documentación adjunta a cada link y no dudes en comentarnos tus dudas.


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 25 de agosto de 2017 2:55
  • Puedes direccionar la ruta que apunte siempre a la carpeta de la aplicación mediante

    Dim ruta As String = Application.StartupPath & "\Archivo.(extención)"

    arrastras el archivo al Debug y al compilar aparecerá junto con la aplicacíon Aplication.StartupPaht direccióna a donde esté la aplicación

    Edito: Lo paso a VB NET

    Saludo

    jueves, 24 de agosto de 2017 20:58
  • Hola:

     Tendrías que obtener las carpetas especiales del sistema por medio del Enumerador SpecialFolder de la clase Environment:

    Dim myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
     Una vez obtenido el path del folder deseado solo bastara que utilizar el Path.Combine y la clase Directory para crear tu directorio, pero ojo, la clase Environmet devolverá únicamente el path de los documentos del usuario Actual, si baja un reporte solo el podrá verlo.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta JorgeDiazC lunes, 28 de agosto de 2017 22:23
    lunes, 28 de agosto de 2017 16:52

Todas las respuestas

  • Puedes direccionar la ruta que apunte siempre a la carpeta de la aplicación mediante

    Dim ruta As String = Application.StartupPath & "\Archivo.(extención)"

    arrastras el archivo al Debug y al compilar aparecerá junto con la aplicacíon Aplication.StartupPaht direccióna a donde esté la aplicación

    Edito: Lo paso a VB NET

    Saludo

    jueves, 24 de agosto de 2017 20:58
  • Hola:

     Puedes hacer que el instalador cree el directorio al momento de hacer el deploy de tus archivos, pero, ¿Que pasaría si por error alguien elimina la carpeta?, si no validas la existencia previa del mismo antes de querer utilizarla recibirás una bonita Exception, el uso del Application.StartupPath me parece muy atinado solo que debes de prevenir el escenario comentado, entonces siguiendo ese camino te sugeriría validar la existencia del directorio antes y en caso de que no exista crearlo para posteriormente utilizarlo: 

           If(Not System.IO.Directory.Exists(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP")))Then
                System.IO.Directory.CreateDirectory(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP"))
            Else
                System.IO.File.WriteAllBytes(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP", "nombreArchivo.pdf"), ReportViewer1.LocalReport.Render("PDF"))
            End If

     Te explico:

     La condición IF valida la existencia de la carpeta "FacturaComprobanteAcuerdoP" justo a un lado del archivo que inicio la ejecución por medio del método Exists de la clase Directory.

    El uso del Método Combine de la clase path, es para formar un path valido, su uso evita estar concatenando separadores a diestra y siniestra.

     El uso de la propiedad StartupPath de la clase Application, es para obtener la ruta de acceso de archivo ejecutable que inicio la aplicación, esta propiedad es muy útil para temas como el que nos tiene aquí platicando.

     Analiza lo comentado, lee la documentación adjunta a cada link y no dudes en comentarnos tus dudas.


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 25 de agosto de 2017 2:55
  • todo funciona bien, pero cuando creo el Setup las carpetas se crean en el disco en una direccion super larga C:\Users\jole_\AppData\Local\VirtualStore\Program Files (x86)\Default Company Name\Epic Predios\Facturas y si la carpeta no esta creada no me guarda el primer archivo.

    puedo hacer que las carpetas queden en Mis Documentos, y que me guarde el primer archivo aun si no se ha creado la carpeta?


    JorgeLeonardoDC

    lunes, 28 de agosto de 2017 14:13
  • Hola:

     Al código que te pase, agrégale una linea:

    If(Not System.IO.Directory.Exists(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP")))Then
        'Creas el directorio
    	System.IO.Directory.CreateDirectory(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP"))
    	'Usas el directorio
    	System.IO.File.WriteAllBytes(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP", "nombreArchivo.pdf"), ReportViewer1.LocalReport.Render("PDF"))
    Else
        System.IO.File.WriteAllBytes(System.IO.Path.Combine(Application.StartupPath, "FacturaComprobanteAcuerdoP", "nombreArchivo.pdf"), ReportViewer1.LocalReport.Render("PDF"))
    End If
    De esa forma en caso de que no exista la carpeta, la creara y luego la usara para depositar el archivo.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 28 de agosto de 2017 15:01
  • Y lo de carpeta de Mis Documentos?

    JorgeLeonardoDC

    lunes, 28 de agosto de 2017 16:31
  • Hola:

     Tendrías que obtener las carpetas especiales del sistema por medio del Enumerador SpecialFolder de la clase Environment:

    Dim myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
     Una vez obtenido el path del folder deseado solo bastara que utilizar el Path.Combine y la clase Directory para crear tu directorio, pero ojo, la clase Environmet devolverá únicamente el path de los documentos del usuario Actual, si baja un reporte solo el podrá verlo.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta JorgeDiazC lunes, 28 de agosto de 2017 22:23
    lunes, 28 de agosto de 2017 16:52
  • Funciono perfectamente, Gracias


    JorgeLeonardoDC

    lunes, 28 de agosto de 2017 22:23