canal visual basic .net

Recursos Visual Basic.NET, VB.NET, Manuales de programación, Tutoriales, Foros de programación, Comunidad de programadores

Usuarios activos:  37

Foros de programación, recursos, tutoriales, sistemas operativos...

Bienvenido a la zona de foros. Participa en alguno de nuestros foros: Foros de visual basic, foros de visual basic.net foros de Crystal reports, programas gratis, foros de C++ - C# , foros de Java, foros de PHP, foros de ASP.net. Seguro que hay un foro que te servirá de gran utilidad y si no lo encuentras avísanos y crearemos uno nuevo.
Resultados 1 al 17 de 17
Árbol de 2"Me Gusta"
  • 1 Mensaje Por RoyMata
  • 1 Mensaje Por RoyMata

Tema: Obtener la fecha de una carpeta de nombre variable

  1. #1
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Lightbulb Obtener la fecha de una carpeta de nombre variable

    Buenas tardes, uso visual studio 6.0

    Hay un programa que utilizo en la empresa, que crea diariamente una carpeta en x ruta con la fecha + algunos dígitos.es decir: 15Jul_00 o 15jul_05, y es completamente impredecible el nombre con el que creara la carpeta.

    Hasta ahora ya tengo como sacar la ultima fecha de modificación, pero de una carpeta q no cambia de nombre.

    Me gustaría saber si hay manera de obtener la ultima carpeta creada dentro de una ruta, y de esta obtener su fecha de modificación.

    lo que me eh planteado es algo así

    a = ultima carpeta creada en la ruta x
    sacar ultima fecha de modificación de a

    Alguna recomendación o sugerencia

  2. #2
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    Hola ericka
    Estamos hablando de carpetas o de archivos? La metodologia cambia un poco dependiendo si quieres obtener las carpetas o los archivos en una ruta especifica. Por otro lado, que sistema operativo utiliza el terminal donde esta instalado tu aplicativo? Y si es de archivos que estamos hablando, todos tienen la misma extension? Estan todos almacenados en la misma ruta? Para obtener la fecha de modificacion utilizas el objeto FileSystemObject?
    A ericka_192001 le gusta esto.

  3. #3
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Predeterminado RE:

    Son carpetas, lo que me interesa saber es si esas carpetas se están actualizando en tiempo real, la situación esta así: hay una capeta llamada storage1 donde diariamente se crean 1 o a veces 2 carpetas con la fecha actual es decir:

    \\storage1\15Agosto_15 lo q va despues del _ es variable
    ó
    \\storage1\15Agosto_2

    Quiero saber cual fue la ultima carpeta creada dentro de storage1 y su ultima fecha de modificación, ya que deben actualizarse en tiempo real con archivos en su interior de la misma extensión. pero en realidad la información que necesito seria directamente de la carpeta 15Agosto_15

  4. #4
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    En este caso se me ocurre que podrias utilizar un while para recorrer cada una de las carpetas almacenadas en storage1 y durante el recorrido guardar la fecha de modificacion de cada carpeta en un array para luego resorrer el array buscando la ultima fecha de modificacion.
    Podrias postear el codigo que estas utilizando para obtener la fecha de modificacion de cada carpeta? Estas utilizando FileSystemObject para lograrlo?
    La verdad en este tema nunca he trabajado con carpetas, lo he hecho con archivos, pero hasta donde conozco las carpetas no guardan fecha de modificacion puesto que hay se supone existen varios archivos dentro de ellas y son los archivos los que se modifican, no los carpetas.
    Sin embargo pasame la info que te solicito y vemos como podemos solucionarlo

  5. #5
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Predeterminado Re:

    Estoy usando
    log1.Caption = FileDateTime("\\192.168.1.1\storage1\ aquí debería ir el nombre de la ultima creada")

    lo que se me ocurre también es que si hay manera de identificar cual es la ultima carpeta credada, puedo hacer comparaciones sobre su volumen y así saber si estan "cayendo" los archivos que necesito

    y pega el resultado en un cuadrito de texto.
    tengo xp como s.o., y si le doy propiedades a la carpeta si me muestra la ultima fecha de modificación.

  6. #6
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    Ok, precisamente por eso preguntaba por el SO, WinXP si da fecha de modificacion, al contrario de WinVista Y Win7.
    En ese caso, para recorrer cada una de las carpetas contenidas en tu ruta \\192.168.1.1\storage1\ puedes utilizar FileSystemObject e ir almacenando cada fecha de modificacion en un array para luego recorrer el array buscando la ultima fecha de modificacion.
    Seria algo como esto:
    Primero en tu proyecto debes agregar la referencia a Microsoft Scripting Runtime (sino no puedes utilizar el objeto FileSystemObject)
    Código:
    1. 'declara el objeto FSO
    2. Dim Fso As FileSystemObject
    3. 'declara la variable que contendra la ruta raiz
    4. Dim Directorio As Folder
    5. 'inicializa el objeto FSO
    6. Set Fso = New FileSystemObject
    7. 'almacena en la variable la direccion de la ruta raiz
    8. Set Directorio = Fso.GetFolder("\\192.168.1.1\storage1")
    9. Dim Subdirectorio As Folder
    10. 'declara el array para almacenar las fechas de los subdirectorios
    11. Dim Fechas() as Date
    12. 'inicializa el array con la cantidad de subdirectorios
    13. ReDim Fechas(Directorio.SubFolders.Count)
    14. 'contador para llevar la cantidad de subdirectorios
    15. Dim Contador as Integer
    16. Contador = 0
    17. 'recorre todos los subdirectorios contenidos en la ruta raiz
    18. For Each Subdirectorio In Directorio.SubFolders
    19.        'toma la fecha del subdirectorio (la almacena en el array)
    20.       Fecha(Contador) = FileDateTime(Directorio.Path & "\" & Subdirectorio.Name)
    21.        Contador = Contador + 1    'aumenta el contador
    22. Next
    23. 'para almacenar la ultima fecha obtenida
    24. Dim UltimaFecha as Date
    25. 'toam la primera fecha del array
    26. UltimaFecha = Fecha(0)
    27. Dim i as Integer
    28. 'recorre cada elemento dentro del array
    29. For i = 1 to Contador - 1
    30.       'si la fecha del siguiente elemento en el array es mayor a la utima fecha obtenida
    31.      If Fecha(i) > UltimaFecha
    32.             'toma el nuevo valor para ultima fecha
    33.            UltimaFecha = Fecha(i)
    34.      End If
    35. Next
    36. 'por ultimo pinta la ultima fecha obtenida
    37. log1.Caption = CStr(UltimaFecha)
    Me parece que es la forma mas practica de lograrlo.
    Por favor prueba de esta forma y nos cuentas los resultados.
    Suerte!
    A ericka_192001 le gusta esto.

  7. #7
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Wink RE:

    Funciono excelente pero quedo así, solo que ahora me gustaría saber si existe algo similar o alguna modificación al mismo para que también me arroje el nombre de la carpeta.

    RoyMata: de Vdd muchisimas gracias

    Código PHP:
    Private Sub Form_Load()
    'declara el objeto FSO
    Dim Fso As FileSystemObject
    '
    declara la variable que contendra la ruta raiz
    Dim Directorio 
    As Folder
    'inicializa el objeto FSO
    Set Fso = New FileSystemObject
    '
    almacena en la variable la direccion de la ruta raiz
    Set Directorio 
    Fso.GetFolder("\\192.168.1.1\storage1")
    Dim Subdirectorio As Folder
    'declara el array para almacenar las fechas de los subdirectorios
    Dim Fechas() As Date
    '
    inicializa el array con la cantidad de subdirectorios
    ReDim Fechas
    (Directorio.SubFolders.Count)
    'contador para llevar la cantidad de subdirectorios
    Dim Contador As Integer
    Contador = 0
    '
    recorre todos los subdirectorios contenidos en la ruta raiz
    For Each Subdirectorio In Directorio.SubFolders
           
    'toma la fecha del subdirectorio (la almacena en el array)
           Fechas(Contador) = FileDateTime(Directorio.Path & "\" & Subdirectorio.Name)
           Contador = Contador + 1    '
    aumenta el contador
    Next
    'para almacenar la ultima fecha obtenida
    Dim UltimaFecha As Date
    '
    toam la primera fecha del array
    UltimaFecha Fechas(0)
    Dim i As Integer
    'recorre cada elemento dentro del array
    For i = 1 To Contador - 1
          '
    si la fecha del siguiente elemento en el array es mayor a la utima fecha obtenida
          
    If Fechas(i) > UltimaFecha Then
                
    'toma el nuevo valor para ultima fecha
                UltimaFecha = Fechas(i)
         End If
    Next
    '
    por ultimo pinta la ultima fecha obtenida
    log1
    .Caption CStr(UltimaFecha)
    End Sub 

  8. #8
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    Ya tienes declarada una variable llamada Subdirectorio del tipo Folder. Para obtener el nombre de la carpeta solo utiliza la propiedad Name:
    Código:
    1. Dim NombreCarpeta as String
    2. NombreCarpeta = Subdirectorio.Name

  9. #9
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Predeterminado RE:

    Hola Roy, intente ya pero me arroja el nombre de una carpeta que no la misma a la que le saca la fecha, supongo que hace falta algún contador??? bueno ademas arme el código así, con lo que me mandaste xq de otra manera mandaba error

    Código:
    Private Sub Form_Load()
    'declara el objeto FSO
    Dim Fso As FileSystemObject
    'declara la variable que contendra la ruta raiz
    Dim Directorio As Folder
    'inicializa el objeto FSO
    Set Fso = New FileSystemObject
    'almacena en la variable la direccion de la ruta raiz
    Set Directorio = Fso.GetFolder("\\172.18.86.44\d$\compartida")
    Dim Subdirectorio As Folder
    'declara el array para almacenar las fechas de los subdirectorios
    Dim Fechas() As Date
    'inicializa el array con la cantidad de subdirectorios
    ReDim Fechas(Directorio.SubFolders.Count)
    'contador para llevar la cantidad de subdirectorios
    Dim Contador As Integer
    Contador = 0
    Dim NombreCarpeta As String
    
    'recorre todos los subdirectorios contenidos en la ruta raiz
    For Each Subdirectorio In Directorio.SubFolders
           'toma la fecha del subdirectorio (la almacena en el array)
           Fechas(Contador) = FileDateTime(Directorio.Path & "\" & Subdirectorio.Name)
           Contador = Contador + 1    'aumenta el contador
           NombreCarpeta = Subdirectorio.Name
    Next
    'para almacenar la ultima fecha obtenida
    Dim UltimaFecha As Date
    'toam la primera fecha del array
    UltimaFecha = Fechas(0)
    Dim i As Integer
    
    
    'recorre cada elemento dentro del array
    For i = 1 To Contador - 1
          'si la fecha del siguiente elemento en el array es mayor a la utima fecha obtenida
          If Fechas(i) > UltimaFecha Then
                'toma el nuevo valor para ultima fecha
                UltimaFecha = Fechas(i)
                
                
         End If
    Next

  10. #10
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    Si el nombre del subdirectorio que quieres recuperar es el de la carpeta con la ultima fecha se complica un poco la situacion.
    Se me ocurre crear un segundo array en donde almacenes los nombres de todas las carpetas. El contador ya lo tienes declarado y cargado en el segundo bucle, entonces solo tendrias que cargar la variable NombreCarpeta desde el segundo array y utilizando el mismo contador cuando encuentres la ultima fecha.
    Algo asi:
    (no voy a repetir todo el codigo de nuevo, solamente lo que nos interesa modificar)
    Código:
    1. 'agregar estas 2 lineas antes de iniciar el primer bucle:
    2. Dim Archivos() as String
    3. ReDim Archivos(Directorio.SubFolders.Count)
    4.  
    5. For Each Subdirectorio In Directorio.SubFolders
    6.      'aqui el mismo codigo tal como lo tenemos inicialmente para este bucle
    7.     'solamente la ultima linea: NombreCarpeta = Subdirectorio.Name la sustituyes por esto:
    8.     Archivos(Contador) = Subdirectorio.Name
    9. Next
    10.  
    11. 'y en el segundo bucle:
    12. '(todo el codigo igual como lo teniamos, solo agregar la linea antes de cerrar el If
    13. For i = 1 To Contador - 1
    14.       'si la fecha del siguiente elemento en el array es mayor a la utima fecha obtenida
    15.      If Fechas(i) > UltimaFecha Then
    16.             'toma el nuevo valor para ultima fecha
    17.            UltimaFecha = Fechas(i)
    18.             'esta que sigue es la linea nueva (la unica que tendrias que agregar)
    19.            NombreCarpeta = Archivos(i)
    20.      End If
    21. Next
    Suerte

  11. #11
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Predeterminado Pruebas

    Hola Roy!

    Por carga de trabajo aun no he podido hacer pruebas, pero espero realizarlas este fin de semana y para dar por cerrado el tema! gracias!

  12. #12
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Predeterminado RE:

    Hola Roy, hasta apenas puedo volver a trabajar en mi proyecto,

    Pero estoy confundida, me comentas que crear un segundo array, entonces seria otro form?? agrego las lineas que me compartes?? o tengo q eliminar del codigo lo que me daba la fecha y sustituir x nombre?

    Perdón, pero lo deje tanto tiempo que tengo mil dudas ya

  13. #13
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    Hola de nuevo ericka.
    Un array es un arreglo (o una matriz), es decir, una variable multidimensional en donde puedes alojar temporalmente varios valores a la vez.
    Ya estabamos utilizando un array llamado fechas() para almacenar las fechas de cada carpeta. Ahora la idea es crear un segundo array para almacenar los subdirectorios.
    Solamente agrega este nuevo codigo que puse en el anterior post y el resto puedes mantenerlo igual.
    Suerte con eso ericka!!!!!
    Saludos

  14. #14
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Predeterminado Re: Gracias

    Gracias Roy, la buena noticia es que ya corre sin errores la mala es q tengo duda sobre como hacer q muestre la info en la label, segun yo ya le agregue pero me sale vacio

    Código:
    Private Sub Form_Load()
    'declara el objeto FSO
    Dim Fso As FileSystemObject
    'declara la variable que contendra la ruta raiz
    Dim Directorio As Folder
    'inicializa el objeto FSO
    Set Fso = New FileSystemObject
    'almacena en la variable la direccion de la ruta raiz
    Set Directorio = Fso.GetFolder("\\172.18.86.231\grabanice\ATMET_SC1.atmetepec.atentomx.com\ATMETLOG2_SR_30382503")
    Dim Subdirectorio As Folder
    'declara el array para almacenar las fechas de los subdirectorios
    Dim Fechas() As Date
    Dim Archivos() As String
    'inicializa el array con la cantidad de subdirectorios
    ReDim Fechas(Directorio.SubFolders.Count)
    ReDim Archivos(Directorio.SubFolders.Count)
    'contador para llevar la cantidad de subdirectorios
    Dim Contador As Integer
    Contador = 0
    'recorre todos los subdirectorios contenidos en la ruta raiz
    For Each Subdirectorio In Directorio.SubFolders
    'For Each Subdirectorio In Directorio.SubFolders
           'toma la fecha del subdirectorio (la almacena en el array)
           Fechas(Contador) = FileDateTime(Directorio.Path & "\" & Subdirectorio.Name)
           Contador = Contador + 1    'aumenta el contador
           Archivos(Contador) = Subdirectorio.Name
           Next
    
    'para almacenar la ultima fecha obtenida
    Dim UltimaFecha As Date
    'toam la primera fecha del array
    UltimaFecha = Fechas(0)
    Dim i As Integer
    'recorre cada elemento dentro del array
    For i = 1 To Contador - 1
    'For i = 1 To Contador - 1
          'si la fecha del siguiente elemento en el array es mayor a la utima fecha obtenida
          If Fechas(i) > UltimaFecha Then
                'toma el nuevo valor para ultima fecha
                UltimaFecha = Fechas(i)
                 If Fechas(i) > UltimaFecha Then
                 UltimaFecha = Fechas(i)
                 NombreCarpeta = Archivos(i)
                 End If
                 
         End If
    Next
    'por ultimo pinta la ultima fecha obtenida
    log1.Caption = CStr(UltimaFecha)
    log2.Caption = CStr(NombreCarpeta)
    End Sub

  15. #15
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    Recuerda que ese codigo lo estas cargando en el evento Load de tu formulario. Esto quiere decir que es el primer proceso que se ejecuta al cargar el form, el form todavia no ha terminado de pintarse en pantalla cuando esto se ejecuta, es por eso que los labels te aparecen vacios. Solo agrega esto:
    Código:
    1. log1.Caption = CStr(UltimaFecha)
    2. log2.Caption = CStr(NombreCarpeta)
    3. log1.Refresh
    4. log2.Refresh
    Con el metodo Refresh del label logras que el Caption, asi como las propiedades de Font, ForeColor y BackColor se refresquen

  16. #16
    ericka_192001 está desconectado Junior Member Iniciad@
    Fecha de ingreso
    10 ago, 12
    Mensajes
    14

    Predeterminado Re: Gracias

    Hola Roy, la fecha si me aparece, pero el nombre de la carpeta aun no, estoy revisando la parte del array y q coincida el nombre

    Código:
    Private Sub Form_Load()
    
    Dim Fso As FileSystemObject
    Dim Directorio As Folder
    Set Fso = New FileSystemObject
    Set Directorio = Fso.GetFolder("\\192.1.1.1\storage")
    Dim Subdirectorio As Folder
    Dim Fechas() As Date
    ReDim Fechas(Directorio.SubFolders.Count)
    Dim Contador As Integer
    Contador = 0
    
    For Each Subdirectorio In Directorio.SubFolders
           'toma la fecha del subdirectorio (la almacena en el array)
           Fechas(Contador) = FileDateTime(Directorio.Path & "\" & Subdirectorio.Name)
           Contador = Contador + 1    'aumenta el contador
    Next
    'para almacenar la ultima fecha obtenida
    Dim UltimaFecha As Date
    'toam la primera fecha del array
    UltimaFecha = Fechas(0)
    Dim i As Integer
    'recorre cada elemento dentro del array
    For i = 1 To Contador - 1
          'si la fecha del siguiente elemento en el array es mayor a la utima fecha obtenida
          If Fechas(i) > UltimaFecha Then
                'toma el nuevo valor para ultima fecha
                UltimaFecha = Fechas(i)
         End If
    Next
    'por ultimo pinta la ultima fecha obtenida
    log1.Caption = CStr(UltimaFecha)
    log2.Caption = CStr(NombreCarpeta)
    log1.Refresh
    log2.Refresh
    
    End Sub

  17. #17
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    178

    Predeterminado

    Lo que estas intentando mostrar en log2.Caption es el contenido de la variable NombreCarpeta. Pero esa variable no la declaras ni la inicializas en ninguna parte de tu codigo. Eso provoca que la variable venga vacia cuando la utilizas, a pesar de que le hayas cargado un valor.
    Antes de asignarle un valor a NombreCarpeta declarala e inicializala:
    Código:
    1. Dim NombreCarpeta as String
    2. NombreCarpeta = ""

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Visual Studio .VisualBasic.net .ADO.NET .ASP.NET .Framework .Crystal report
[Visual Basic .NET · Información legal · Condiciones de uso · Publicidad · Contacto · RSS novedades Foro · Inicio]
Un sitio web de Internelia (Ontecnia) © Copyright 2013 canalvisualbasic.net. Todos los derechos reservados