martes, 16 de marzo de 2010

Ejemplos para trabajar con archivos en visual basic.net

1 - Contar archivos en un directorio

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)Handles MyBase.Load

Try

Dim ContadorDeArchivos As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
'le indicamos el path que queremos
ContadorDeArchivos = My.Computer.FileSystem.GetFiles("C:\WINDOWS")
'nos devuelve la cantidad de archivos

MsgBox("La Cantidad de Archivos es: " & CStr(ContadorDeArchivos.Count))
' error
Catch oExcep As Exception
MsgBox("Descripción del error : " &oExcep.Message, MsgBoxStyle.Critical, "Error")
End Try

End Sub

2 - Crear un archivo vacío ( método Create - objeto System.IO.File )

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load


Try
Dim Archivo As System.IO.FileStream
' crea un archivo vacio prueba.txt
Archivo = System.IO.File.Create("c:\Prueba.txt")
' error
Catch oe As Exception
MsgBox(oe.Message, MsgBoxStyle.Critical)
End Try
End Sub

3 - Crear un archivo plano y añadirle texto ( método WriteLine
del objeto StreamWriter. Espacio de nombres System.IO )

Option Explicit On

Imports System.IO

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)Handles MyBase.Load

Dim oSW As New StreamWriter("C:\archivo_prueba.txt")

Dim Linea As String = "Línea de texto " & vbNewLine & "Otra linea de texto"
oSW.WriteLine(Linea)
oSW.Flush()

End Sub
End Class

4 - My.Computer.FileSystem.GetFiles - Listar archivos

Ejemplo que carga y lista en un control listbox, los archivos de una
carpeta
Colocar un ListBox1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Try
' lista todos los archivos dll del directorio windows _
' SearchAllSubDirectories : incluye los Subdirectorios
' SearchTopLevelOnly : para buscar solo en el nivel actual
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
"c:\windows",FileIO.SearchOption.SearchAllSubDirectories,"*.dll")

ListBox1.Items.Add(Archivo)
Next
' errores
Catch oe As Exception
MsgBox(oe.Message, MsgBoxStyle.Critical)
End Try
End Sub

5 - My.Computer.FileSystem.FindInFiles - Buscar dentro de un
fichero

Lo siguiente Busca en un directorio archivos que contengan una cadena de
texto determinada
Controles : un ListBox1 en el form
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Try

Dim Archivo As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
' busca "Hola mundo" en un solo nivel ( SearchTopLevelOnly ) en el directorio c:
Archivo = My.Computer.FileSystem.FindInFiles( _
"C:\","Hola Mundo",True, _
FileIO.SearchOption.SearchTopLevelOnly)
' recorre la lista
For Each name As String In Archivo
' Agrega
ListBox1.Items.Add(name)
Next
' error
Catch oe As Exception
MsgBox(oe.Message, MsgBoxStyle.Critical)
End Try
End Sub


6 - Comprobar si un directorio o archivo Existe

Propiedad Exist del objeto Directory y el objeto File. (Espacio de nombres
System.IO)
Option Explicit On

Imports System.IO

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs)Handles MyBase.Load

' Directory
If Directory.Exists("c:\windows") Then
MsgBox("La carpeta existe", MsgBoxStyle.Information)
Else
MsgBox("No existe", MsgBoxStyle.Information)
End If

If File.Exists("c:\windows\explorer.exe") Then
MsgBox("Existe", MsgBoxStyle.Information)
Else
MsgBox("No existe", MsgBoxStyle.Information)
End If
End Sub
End Class


7 - Renombrar un archivo

( My.Computer.FileSystem.RenameFile )
Option Explicit On

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' ruta del archivo y el nuevo nombre
Dim sPath As String = "c:\archivo.txt"
Dim sNuevoNombre As String = "archivo_Renombrado.txt"

Try
' Renombrarlo con la función renameFile
My.Computer.FileSystem.RenameFile(sPath, sNuevoNombre)
MsgBox("Ok.", MsgBoxStyle.Information, "Renombrar archivo")
' errores
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub

End Class


8 - Mover

( My.Computer.FileSystem.MoveFile )
Option Explicit On

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' ruta del archivo origen y el nuevo path y nombre
Dim sArchivoOrigen As String = "c:\archivo.txt"
Dim sRutaDestino As String = "d:\archivo.txt"

Try
' Mover el fichero.si existe lo sobreescribe
My.Computer.FileSystem.MoveFile(sArchivoOrigen,sRutaDestino,True)
MsgBox("Ok.", MsgBoxStyle.Information, "Mover archivo")
' errores
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub
End Class


9 Eliminar archivos y carpetas

( My.Computer.FileSystem.DeleteFile )
( My.Computer.FileSystem.DeleteDirectory )
Option Explicit On

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Try
' Eliminar el archivo, mostrando el cuadro
'de diálogo de eliminar de windows para confirmar
Dim sdir As String = "c:\Nueva carpeta"
Dim Spath As String = "c:\archivo.txt"

' Archivo
My.Computer.FileSystem.DeleteFile( _
Spath,FileIO.UIOption.AllDialogs, _
FileIO.RecycleOption.SendToRecycleBin, _
FileIO.UICancelOption.DoNothing)

' carpeta
My.Computer.FileSystem.DeleteDirectory( _
sdir,FileIO.UIOption.AllDialogs, _
FileIO.RecycleOption.SendToRecycleBin, _
FileIO.UICancelOption.DoNothing)

' errores
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub
End Class


10 - Crear un archivo temporal

( My.Computer.FileSystem.GetTempFileName )
Option Explicit On

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Try
' crea el archivo en el directorio temp del usuario
Dim sTempFile As String = My.Computer.FileSystem.GetTempFileName.ToString
' muestra la ruta
MsgBox("Archivo creado en la dirección :" &vbNewLine & _
sTempFile,MsgBoxStyle.Information, "Ruta del temporal")

' errores
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub
End Class


11 - Leer todo el contenido de un archivo de texto en una
solo operación, y almacenarlo en una variable

( My.Computer.FileSystem.ReadAllText )
Option Explicit On

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Try
Dim SPath As String = "c:\un_archivo.txt"
Dim sContent As String = vbNullString

With My.Computer.FileSystem
' verifica si existe el path
If .FileExists(SPath) Then
' lee todo el contenido
sContent = .ReadAllText(SPath)
MsgBox(sContent.ToString, MsgBoxStyle.Information, "Datos")
Else
MsgBox("ruta inválida", MsgBoxStyle.Critical, "error")
End If
End With
' errores
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub
End Class


12 - Cargar directorios y archivos en un ListBox ( Métodos
GetFiles y GetDirectories)

Colocar en un formulario dos controles ListBox
Option Explicit On
Option Strict On

Imports System.IO

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

' Obtener todos los archivos .exe del directorio windows ( inclyendo subdirectorios )
For Each archivos As String In Directory.GetFiles("c:\windows","*.exe", _
SearchOption.AllDirectories)
' extraer el nombre de la ruta
archivos = archivos.Substring(archivos.LastIndexOf("\") + 1).ToString
' Agregar el valor al listbox
ListBox1.Items.Add(archivos.ToString)
Next

' Obtener todos los directorios del directorio c: ( un solo nivel )
For Each archivos As String In Directory.GetDirectories("c:\", "*.*", SearchOption.TopDirectoryOnly)
' extraer el nombre de la carpeta de la ruta completa
archivos = archivos.Substring(archivos.LastIndexOf("\") + 1).ToString
' Agregar el valor
ListBox2.Items.Add(archivos.ToString)
Next

End Sub
End Class


13 - Obtener propiedades

Ejemplo que usa la clase FileInfo de system.IO para obtener algunas propiedades y datos de archivos ( el nombre , la fecha y la hora de modificación en formato corto , el tamaño en bytes y la extensión )
Colocar un control Listview, un button y un control TextBox


Código fuente en el formulario principal
Option Explicit On
Option Strict On

Imports System.IO

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' agregar columnas
With ListView1
.Columns.Add("Nombre", 150)
.Columns.Add("Fecha y hora de modificación", 150)
.Columns.Add("Tamaño - bytes ", 100)
.Columns.Add("Extensión", 80)

.View = View.Details
.GridLines = True
End With
Button1.Text = "Listar propiedades"
TextBox1.Text = "c:\windows"
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click


ListView1.Items.Clear()
Try
' recorrer los ficheros en la colección
For Each sFichero As String In Directory.GetFiles( _
TextBox1.Text, "*.*",SearchOption.TopDirectoryOnly)

' Crear nuevo objeto FileInfo
Dim Archivo As New FileInfo(sFichero)

' Crear nuevo objeto ListViewItem
Dim item As New ListViewItem(Archivo.Name.ToString)

' cargar los datos y las propiedades
With item

' LastWriteTime - fecha de modificación
.SubItems.Add(Archivo.LastWriteTime.ToShortDateString & " " & _
Archivo.LastWriteTime.ToShortTimeString)
' Length - tamaño en bytes
.SubItems.Add(Archivo.Length.ToString)

' Extension - extensión
.SubItems.Add(Archivo.Extension.ToString)

ListView1.Items.Add(item) ' añadir el item

End With

Next
' errores
Catch ex As Exception
Debug.Print(ex.Message.ToString)
Beep()
End Try

End Sub
End Class

9 comentarios:

  1. Aqui pueden encontrar varios ejercicios de VB.Net 2010 con su codigo fuente ---> http://ayudaveloz.blogspot.com/

    ResponderEliminar
  2. muy buena información me ayudo demasiado gracias

    ResponderEliminar
  3. Muy bien , resulto excelente la información.

    Tengo una consulta:

    1.- luego de almacenar datos en un archivo.txt quiero tomar estos datos por ejemplo
    * Nombre
    * Clave

    Estos estas asi en el texto.txt

    roberto
    12345

    y a cada uno de ellos colcoarlos en una variable.

    Les agradecería mucho, ojo pero que sea en un archivo plano (.txt) por favor nuevamente muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola roberto, en mi caso lo que hice fue usar el tamaño de la variable Ej: la variable es un string de 20 chars, para crear el archivo creo una funcion que si le faltan lugares al dato para completar los 20 char, los completa con espacios, y al buscar los datos en el archivo, se que los primeros 20 chars son la primer variable, los segundos 20 chars son la segunda variable y asi... Saludos

      Eliminar
  4. Muy buen blog y muy buena informacion, soy un programador novato y me ayudaste mucho! gracias!

    ResponderEliminar
  5. ImportsSystem.Net.FtpWebRequest
    ImportsSystem.Net
    ImportsSystem.IO
    PublicClassFtp

    Dimhost,user,passAsString

    PublicSubNew(ByValhostAsString,ByValuserAsString,ByValpassAsString)
    Me.host=host
    Me.user=user
    Me.pass=pass
    EndSub

    PublicFunctioneliminarFichero(ByValficheroAsString)AsString
    DimpeticionFTPAsFtpWebRequest

    'CreamosunapeticiónFTPconladireccióndelficheroa
    peticionFTP=CType(WebRequest.Create(NewUri(fichero)),FtpWebRequest)

    'Fijamoselusuarioylacontraseña
    peticionFTP.Credentials=NewNetworkCredential(user,pass)

    'Seleccionamoselcomandoquevamosautilizar:Eliminarunfichero
    peticionFTP.Method=WebRequestMethods.Ftp.DeleteFile
    peticionFTP.UsePassive=False

    Try
    DimrespuestaFTPAsFtpWebResponse
    respuestaFTP=CType(peticionFTP.GetResponse(),FtpWebResponse)
    respuestaFTP.Close()
    'Sitodohaidobien,devolvemosString.Empty
    ReturnString.Empty
    CatchexAsException
    'Siseproducealgúnfallo,sedevolveráelmensajedelerror
    Returnex.Message
    EndTry
    EndFunction

    PublicFunctionexisteObjeto(ByValdirAsString)AsBoolean
    DimpeticionFTPAsFtpWebRequest

    'CreamosunapeticionFTPconladireccióndelobjetoquequeremossabersiexiste
    peticionFTP=CType(WebRequest.Create(NewUri(dir)),FtpWebRequest)

    'Fijamoselusuarioylacontraseñadelapetición
    peticionFTP.Credentials=NewNetworkCredential(user,pass)

    'Parasabersielobjetoexiste,solicitamoslafechadecreacióndelmismo
    peticionFTP.Method=WebRequestMethods.Ftp.GetDateTimestamp

    peticionFTP.UsePassive=False

    Try
    'Sielobjetoexiste,sedevolveráTrue
    DimrespuestaFTPAsFtpWebResponse
    respuestaFTP=CType(peticionFTP.GetResponse(),FtpWebResponse)
    ReturnTrue
    CatchexAsException
    'Sielobjetonoexiste,seproduciráunerroryalentrarporelCatch
    'sedevolveráfalso
    ReturnFalse
    EndTry
    EndFunction

    PublicFunctioncreaDirectorio(ByValdirAsString)AsString
    DimpeticionFTPAsFtpWebRequest

    'CreamosunapeticionFTPconladireccióndeldirectorioquequeremoscrear
    peticionFTP=CType(WebRequest.Create(NewUri(dir)),FtpWebRequest)

    'Fijamoselusuarioylacontraseñadelapetición
    peticionFTP.Credentials=NewNetworkCredential(user,pass)

    'Seleccionamoselcomandoquevamosautilizar:Crearundirectorio
    peticionFTP.Method=WebRequestMethods.Ftp.MakeDirectory

    Try
    DimrespuestaAsFtpWebResponse
    respuesta=CType(peticionFTP.GetResponse(),FtpWebResponse)
    respuesta.Close()
    'Sitodohaidobien,sedevolveráString.Empty
    ReturnString.Empty
    CatchexAsException
    'Siseproducealgúnfallo,sedevolveráelmensajedelerror
    Returnex.Message
    EndTry
    EndFunction

    PublicFunctionsubirFichero(ByValficheroAsString,ByValdestinoAsString,_
    ByValdirAsString)AsString
    DiminfoFicheroAsNewFileInfo(fichero)

    DimuriAsString
    uri=destino

    'Sinoexisteeldirectorio,locreamos
    IfNotexisteObjeto(dir)Then
    creaDirectorio(dir)
    EndIf

    DimpeticionFTPAsFtpWebRequest

    'CreamosunapeticionFTPconladireccióndelficheroquevamosasubir
    peticionFTP=CType(FtpWebRequest.Create(NewUri(destino)),FtpWebRequest)

    'Fijamoselusuarioylacontraseñadelapetición
    peticionFTP.Credentials=NewNetworkCredential(user,pass)

    peticionFTP.KeepAlive=False
    peticionFTP.UsePassive=False

    'Seleccionamoselcomandoquevamosautilizar:Subirunfichero
    peticionFTP.Method=WebRequestMethods.Ftp.UploadFile

    'Especificamoseltipodetransferenciadedatos
    peticionFTP.UseBinary=True

    'Informamosalservidorsobreeltamaño
    peticionFTP.ContentLength=infoFichero.Length

    'Fijamosunbufferde2KB
    DimlongitudBufferAsInteger
    longitudBuffer=2048
    DimlectorAsByte()=NewByte(2048){}

    DimnumAsInteger

    'Abrimoselficheroparasubirlo
    DimfsAsFileStream
    fs=infoFichero.OpenRead()

    Try
    DimescritorAsStream
    escritor=peticionFTP.GetRequestStream()

    'Leemos2KBdelficheroencadaiteración
    num=fs.Read(lector,0,longitudBuffer)

    While(num<>0)
    'Escribimoselcontenidodelflujodelecturaenel
    'flujodeescrituradelcomandoFTP
    escritor.Write(lector,0,num)
    num=fs.Read(lector,0,longitudBuffer)
    EndWhile

    escritor.Close()
    fs.Close()
    'Sitodohaidobien,sedevolveráString.Empty
    ReturnString.Empty
    CatchexAsException
    'Siseproducealgúnfallo,sedevolveráelmensajedelerror
    Returnex.Message
    EndTry
    EndFunction
    EndClass

    ResponderEliminar
    Respuestas
    1. Aca les dejo un aporte, es una clase completa para manejo de archivos ftp, tube que eliminar los espacios por que se exedia del limite de caracteres, esta clase funciona perfectamente y se va a complementar con el manejo de archivos locales. Saludos!

      Eliminar
  6. Hola Soy Jorge corri el código para encontrar un archivo pero no lo encuentra y lo mas curioso es que no me da ningún error. Me podriar ayudar? .Gracias

    ResponderEliminar