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
)




