Actualizador de Archivos (Administrador)

Esta es una aplicación que estoy haciendo para usarla en mi trabajo.

Una de las pegas que tengo, es actualizar todas las versiones de sistemas antiguos en TODOS los PCs de los usuarios… es una tortura la verdad…

Por eso me dio por hacer  esto😉

La idea era subirlo a BitBucket con Mercurial… pero para variar, me tienen bloqueada la conexión ¬¬

Así que, al menos por ahora, colgaré los archivos en mi SkyDrive.

Como dice el título, esta aplicación tiene 2 partes: Administrador y Cliente.

No pretendo escribir todo, que para eso tienen los fuentes. Esto va para la parte de leer y escribir en json, y leer propiedades de archivos.

Leer JSON

Todos los parámetros de esta aplicación se encuentran en un archivo (Configuraciones.json) El mio es así:

{
	"Configuraciones": {
		"Carpeta_Dropbox": "C:\\dropbox-tmp\\Dropbox\\Public\\",
		"Archivo_json": "Versiones.json",
		"Usuario_Dropbox": "62387943"
	},
	"Sistemas": [
		"CIFIMP", "Expedientes", "Certificados", "Convenios",
		"IQFIMP", "Giro", "OFPA", "Remuneraciones", "Patententes",
		"Tesorería"
	]
}

Tiene 2 campos: Configuraciones donde guardo los datos relevantes, y Sistemas que es un arreglo con todos los sistemas que puedo actualizar.

Para leer esto, desde el load de la aplicación tengo una llamada a función para leer el archivo y traspasarlo a un objeto json:

Private Function read_json_file(archivo As String) As JObject
        Try
            Dim json_txt As IO.StreamReader
            json_txt = IO.File.OpenText(archivo)
            Dim json As New JObject
            json = JObject.Parse(json_txt.ReadToEnd)
            json_txt.Close()
            Return json
        Catch ex As Exception
            Me.salida.Text = ex.ToString
            Return Nothing
        End Try
    End Function 

Recibo la ruta (absoluta) del archivo, lo abro en un StreamReader, y luego lo parseo en un objeto JObject. Ahora, para obtener la información:

Dim json_file As JObject
json_file = Me.read_json_file("Configuraciones.json")
Me.carpeta_dropbox = json_file.Item("Configuraciones").Item("Carpeta_Dropbox")
Me.archivo_json = json_file.Item("Configuraciones").Item("Archivo_json")
Me.usuario_dropbox = json_file.Item("Configuraciones").Item("Usuario_Dropbox")
Me.addCBSistemas(json_file.Item("Sistemas")) 

Para leer el array (que de paso estoy guardando en una columna combobox en una grilla) lo hago así:

Private Sub addCBSistemas(sistemas As JArray)
    Try
        Dim cmb As New DataGridViewComboBoxColumn()
        cmb.HeaderText = "Sistemas"
        cmb.Name = "cmb"
        cmb.MaxDropDownItems = 4
        For Each item In sistemas
            cmb.Items.Add(item.ToString)
        Next
        grilla.Columns.Add(cmb)
    Catch ex As Exception
        Me.salida.Text = ex.ToString
    End Try
End Sub 

Leer propiedades archivos

Esto lo metí dentro de una clase aparte (clase Archivo … xD)

Lo importante es esto Private info As System.IO.FileInfo y ya después es cosa de jugar:

Me.info = My.Computer.FileSystem.GetFileInfo(RUTA_AL_ARCHIVO)
Me.TAMAGNO = Me.info.Length / 1024
Me.CREACION = Me.info.CreationTime
Me.MODIFICACION = Me.info.LastWriteTime
'Para calcular MD5
Public ReadOnly Property getMD5 As String
    Get
        Dim md5 As String = Nothing
        Dim cadena As System.IO.FileStream
        Dim bait As [Byte]()
        Dim md5cryto As New System.Security.Cryptography.MD5CryptoServiceProvider
        cadena = System.IO.File.Open(Me.RUTA, IO.FileMode.Open, IO.FileAccess.Read)
        bait = md5cryto.ComputeHash(cadena)
        cadena.Close()
        md5 = BitConverter.ToString(bait)
        Me.MD5 = md5.Replace("-", "")
        Return Me.MD5
    End Get
End Property

Escribir JSON

Como dije anteriormente, cada info de los archivos lo guardo en un objeto de la clase Archivo, por lo que después recorro un arreglo que tengo y rescato los valores:

For Each a As Archivo In Me.listado
    Dim j As JObject = Me.make_jobect(a)
    If Not IsNothing(j) Then
        jarray.Add(j)
    Else
        Me.salida.Text = "Error al generar JObject"
    End If
Next

'y esta función para llenarlo
Private Function make_jobect(a As Archivo) As JObject
    Try
        Dim job As New JObject()
        job.Add("Nombre", a.NOMBRE)
        job.Add("Ruta", a.RUTA)
        job.Add("Creación", a.CREACION)
        job.Add("Modificación", a.MODIFICACION)
        job.Add("Tamaño", a.TAMAGNO)
        job.Add("MD5", a.MD5)
        job.Add("Url", a.URL)
        Return job
    Catch ex As Exception
        Me.salida.Text = ex.ToString
        Return Nothing
    End Try
End Function 

Y para guardarlo en un archivo

Private Function save_file_versiones(json_string As String) As Boolean
    Try
        Dim archivo As New String(Me.carpeta_dropbox & "\\" & Me.archivo_json)
        If Not Exists(archivo) Then
            Dim file As System.IO.FileStream
            file = System.IO.File.Create(archivo)
            file.Close()
        End If
        My.Computer.FileSystem.WriteAllText(archivo, json_string, False)
        Return True
    Catch ex As Exception
        Me.salida.Text = ex.ToString
        Return False
    End Try
End Function 

Y eso es todo. Obviamente, sl JObject debe pasarse a a texto. La conversión es tan simple como un jobject.toString

La aplicación aquí (lamento no poder subirla a BitBucket … pero bue… tendré que hacerlo desde mi casa😉 )

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en Escritorio, Tutoriales, VB, Windows. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s