Método File.ReadLines (Visual Basic 2013) (Solucionado)

Iniciado por Tazmania40, 22 Junio 2016, 15:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Tazmania40

Buenas, ya estoy acabando mi proyecto y me encuentro con este problema

"ReadLines no es miembro de System.IO.File"

Se que son las Net.Framework porque el proyecto lo tengo con 3.5, pero no quiero cambiarlo a 4.0 o 4.5 (ya los próximos utilizaré esas versiones), pero en este proyecto deseo poder utilizar el programa en equipos con Windows XP.

Hay alguna otra forma de leer filas en los archivos, si tengo que utilizar otra importación o cualquier otro comando que lea filas y lo guarde en un array de texto. Tal y como aparece en el siguiente código, que repito funciona a partir de la versión Net Framework 4.0, pero yo lo requiero para la Net Framework 3.5 (en Windows Form).

Gracias y saludos


Código (vb.net) [Seleccionar]

Imports System.IO

Dim Valor(4) As String
For A = 0 To 4
    Valor(A) = File.ReadLines(ARCHIVOC)(A)           'Leer una sola línea
Next A


Eleкtro

Puedes hacerlo de la siguiente manera:

Código (vbnet) [Seleccionar]
Dim textLines As New List(Of String)

Using sr As New StreamReader(File.OpenRead("Archivo.txt"))
   For count As Integer = 0 To 4
       textLines.Add(sr.ReadLine())
   Next count
End Using


PD: Si lo prefieres puedes usar un Array de tamaño fijo, como en tu ejemplo.

Saludos








Tazmania40

#3
Muchas gracias a los dos, funciona la perfección. Voy a implementarlo al programa principal. Este es todo el código del ejemplo para Net.Framework 3.5

Código (vb.net) [Seleccionar]

Imports System.IO

Public ARCHIVOC As String = Application.StartupPath & "\DisGlobosCla.dat"
Public TopClasi(4) As String

Dim A As Integer
Using SR As New StreamReader(File.OpenRead(ARCHIVOC))
    For A = 0 To 4
         TopClasi(A) = SR.ReadLine()
    Next A
End Using


A ver si cuando acabe me pongo a mirar el tema de ficheros, puesto que en este juego he creado un archivo de clasificación con un archivo plano (aunque he puesto extensión dat) y lo he cifrado para que no se entienda y no hagamos trampas cambiando valores, pero me imagino que lo suyo es poner un archivo binario como hacía con vb6.

Saludos

Eleкtro

#4
Cita de: Tazmania40 en 22 Junio 2016, 18:36 PMA ver si cuando acabe me pongo a mirar el tema de ficheros, puesto que en este juego he creado un archivo de clasificación con un archivo plano (aunque he puesto extensión dat) y lo he cifrado para que no se entienda y no hagamos trampas cambiando valores, pero me imagino que lo suyo es poner un archivo binario como hacía con vb6.

En un lenguaje de alto nivel o abstracción como VB.NET, no necesitas crear un archivo de texto; si tu intención es crear un archivo de configuración de parámetros usados por tu aplicación, entonces .NET Framework te proporciona una manera guiada de llevarlo a cabo: la infraestructura My.Settings -esto creará un archivo de configuración intermediario, pero practicamente todo estará administrado por la aplicación, tú solo tienes que crear las propiedades (desde la pestaña de configuración de tu proyecto), y atribuirle un valor, y cargarlo cuando necesites usar dicho valor.

Si aun así prefieres utilizar otro tipo de archivo intermediario sobre el que poder tener más control, entonces podrías utilizar la serialización binaria, serialización XML, o serialización JS que proporciona .NET Framework. Lee sobre la class BinaryFormatter, XmlSerializer, o JavaScriptSerializer. Obviamente la serialización binaria creará como resultado un archivo binario ilegible al ojo humano, pero yo te recomendaría la serialización XML por la versatilidad que ofrece este tipo de estructura y lo bien integrado que está en .NET, además, para "ocultar" algo siempre puedes utilizar los métodos de Base64 o algoritmos de Hashing o cifrado que puedes encontrar en la librería de classes de .NET.

Saludos.








Tazmania40

#5
Gracias Elektro, como siempre das muchos temas para mirar. Yo soy lento pero constante, además como dije programo por hobby (aunque alguna base de datos con vb he realizado para la empresa). Tengo algunos temarios que todavía tengo que revisar y actualizarme de vb6 a vb.net y el tema de ficheros es uno. Gracias por los consejos y miraré varias formas de poder crear ficheros.

De momento el procedimiento quedó de la siguiente manera y cumple su función, que no sea legible el archivo y si lo tocas porque no coincide las búsquedas que he realizado se vuelve a crear fichero con los parámetros por defecto. Paso código, por otro lado copié unas funciones de CIFRADO y DESCIFRADO que saqué de aqui también.

Código (vb.net) [Seleccionar]

Imports System.IO

Public ARCHIVOC As String = Application.StartupPath & "\DisGlobosCla.dat"
Public TopClasi(4) As String
Public TextoC As String  ' = Aqui asignamos el Texto Cifrado
Public TextoSC As String  ' = Asignamos el texto sin cifrar (para valores por defecto)

Public Sub LeerArchivo_PasoArray()
       Try
           '1º Comprueba si el archivo no existe para crearlo
           If Not My.Computer.FileSystem.FileExists(ARCHIVOC) Then
               My.Computer.FileSystem.WriteAllText(ARCHIVOC, TextoC, False)
           End If
           '2º Desciframos el archivo, asignamos y volvemos a transladar al archivo
           TextoSC = My.Computer.FileSystem.ReadAllText(ARCHIVOC)  'Lee todo archivo
           TextoSC = DESCIFRA(TextoSC)
           My.Computer.FileSystem.WriteAllText(ARCHIVOC, TextoSC, False)
           '3º Lee archivo de texto (sin cifrar) y lo pasa a los Arrays
           Using SR As New StreamReader(File.OpenRead(ARCHIVOC))
               For A As Integer = 0 To 4
                   TopClasi(A) = SR.ReadLine()                     'Leer una sola línea                    
               Next A
           End Using
           '4º Vuelve a cifrar archivo y lo guarda
           TextoC = CIFRA(TextoSC)
           My.Computer.FileSystem.WriteAllText(ARCHIVOC, TextoC, False)
       Catch ex As Exception
           MsgBox(ex.Message, 16, "Error Archivo Clasificación")
       End Try
End Sub


Puede que me repita un poco. El programa descifra el archivo, lo pasa a los array mediante filas para saber el orden de clasificación (mediante otro procedimiento ordeno y escribo), lo vuelvo a cifrar y guardar en el archivo.

Saludetes