Autor Tema: Ficheros con Visual Basic: apertura cierre IO.FileStream IO.StreamWriter ejemplo  (Leído 2005 veces)

rafagranada

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
  • INICIANDOME EN EL VB
    • Ver Perfil
Buenas, ¿qué tal? Os escribo por que tengo un problema con escritura/lectura en VB

El problema es que leo un fichero (fecha anterior.txt) y cuando quiero escribir en el mismo fichero para actualizar la fecha me dice que esta abierto y que no puedo escribir

Os dejo el codigo a ver si me podéis ayudar.

Código: [Seleccionar]
Public Class Form1


    Dim fecha_ant As Date
    Dim fecha_sistema As Date
    Dim fecha_total As Long 'resultado de la resta de las fechas
    Dim fecha_total1 As Integer ' resultado de la resta de fechas para mostrar y comparar

    Dim fecha_nueva As New System.IO.StreamWriter("C:\1\fecha nueva.txt", True)
    Dim fecha_anterior1 As New System.IO.StreamWriter("C:\1\fecha anterior.txt", True)
    Dim fecha_anterior As New System.IO.StreamReader("C:\1\fecha anterior.txt", True)




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



        'ocultamos etiquetas y botones que no tengan que aparecer en la ventana principal
        Label5.Hide()
        Label8.Hide()
        Label6.Hide()
        Label9.Hide()
        Button1.Hide()

        ' MOSTRAMOS FECHA ACTUAL SISTEMA EN LABEL3
        Label3.Text = DateTime.Now.ToString("d MM yyyy")

        'pasamos la fecha del label3 a variable fecha_sistema para poder guardarla en el fichero de nueva fecha
        fecha_sistema = CDate(Label3.Text)

        'leemos la fecha anterior del fichero para saber cual es la ultima realizada
        fecha_ant = CDate(CStr(fecha_anterior.ReadLine()))
        fecha_anterior.Close()

        'escribimos la fecha de hoy en el fichero para poder calcular la diferencia
        fecha_nueva.WriteLine(fecha_sistema)
        fecha_nueva.Close()

        'convertimos las fechas en un string
        Label4.Text = CStr(fecha_ant)

        'hacemos la direfencia entre las dos fechas
        fecha_total = DateDiff(DateInterval.Day, fecha_ant, fecha_sistema)
        fecha_total1 = CInt(Val(fecha_total))

        'sacamos la diferencia de las fechas en el label 6
        Label6.Text = CStr(fecha_total)

        'comparamos si está dentro de rango y mostramos boton salir y cartel del tiempo restante
        If fecha_total1 >= 0 And fecha_total1 <= 6 Then
            Label5.Show()
            Label5.Text = ("Quedan " & fecha_total1 & "  dias para el mantenimiento")
            Button1.Show()
        End If

        'si la fecha del mantenimiento está pasada
        If fecha_total1 > 6 Then

            fecha_anterior1.WriteLine(fecha_sistema) [u][b]//////ESTA LINEA ES EL PROBLEMA/////[/b][/u]
            fecha_anterior.Close()
            Label5.Text = ("El mantenimiento está cumplido en:  " & fecha_total1)

        End If



    End Sub




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

    End Sub



End Class
« Última modificación: 07 de Junio 2020, 19:52 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, para quien revise este hilo, tener en cuenta que para operar con los ficheros se deben abrir y cerrar y además debemos especificar para qué se abre: sólo para escribir, sólo para leer, para ambas cosas, etc. Si manipulamos un fichero sin tener en cuenta esto tendremos problemas al tratar de hacer operaciones no especificadas o sin haber cerrado el fichero antes de volver a manipularlo.

Este sería un ejemplo de operación con ficheros:

Código: [Seleccionar]
Dim textFileStream As New IO.FileStream("C:\Temp\fichero.txt", IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite, IO.FileShare.None)
       
Dim myFileWriter As New IO.StreamWriter(textFileStream)
Dim intCounter As Integer

For intCounter = 0 To 10
      myFileWriter.WriteLine("Esta es la línea " & CStr(intCounter))
Next intCounter
       
myFileWriter.Close()
textFileStream.Close()

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".