Contador en ASP .NET con archivo de texto en VB (2)

Sencillo contador de visitas que utiliza un archivo de texto como almacén del dato y objetos de System.IO (File.Exists(String), File.CreateText(String), StreamReader, StreamWriter, StreamReader.ReadToEnd) para leer y guardar el valor que se incrementa en 1 cada vez que se recarga la página; el número de visitas se muestra formateado con separador de miles mediante el método Strings.FormatNumber

En este ejercicio se muestra cómo crear un contador de visitas muy sencillo en una aplicación ASP .NET. Se utilizan 3 archivos:

  • contador.txt: es un archivo de texto muy simple que actúa como almacén del dato que es el número de veces que se recarga la página
  • contadortxt.aspx: página dinámica con 2 etiquetas con diseño personalizado para mostrar el número de visitas y los errores que pueden suceder
  • contadortxt.aspx.vb: página de código VB con la lógica que lee el dato, lo incrementa en 1 y lo guarda con el nuevo valor.

Archivo de texto

Solamente contiene los caracteres que componen el número de visitas.

Archivo ASPX

También es un archivo de pocas líneas que se limita a generar el fondo de la página de color negro y el color blanco de los números con una determina fuente (Verdana 10 negrita):

<body bgcolor="black">
   <form id="Form1" method="post" runat="server">
      <div align="center">
         <asp:label id="Etiqueta1" runat="server" backcolor="Black" font-name="Verdana" font-size="18" font-bold="True" forecolor="White"></asp:label>
         <asp:label id="Etiqueta2" runat="server" backcolor="Black" font-name="Verdana" font-size="10" forecolor="White"></asp:label>
      </div>
   </form>
</body>

Archivo ASPX.VB

Todo el código está incluido en el procedimiento Page_Load que se produce cada vez que se carga la página. Primero se declaran las variables necesarias.

Dim Lector As StreamReader 'leer desde un archivo de texto'
Dim Escritor As StreamWriter 'escribir en un archivo de texto'
Dim Archivo As String 'ruta al archivo de texto'
Dim sCuenta As String 'cadena leída desd eel archivo de texto'
Dim iCuenta As Integer 'contador para almacenar el número de visitas'

Hay que obtener la ruta al archivo de texto. Es muy sencillo hacerlo con Server.MapPath.

'Una forma de obtener la ruta al archivo de texto de forma directa con Server.MapPath("contador.txt")'
Archivo = Server.MapPath("contador.txt")

Esta tarea se puede llevar a cabo de múltiples formas, aquí comentaré una más compleja aunque también recurre a Server.MapPath.

'Otra forma de obtener la ruta al archivo de texto mediante pasos intermedios, primero se obtiene la ruta a la carpeta actual y después se elabora el resto de la cadena'
Archivo = Server.MapPath(".")
'si la ruta no tiene \ al final, añadir un carácter \ '
If Right(Archivo, 1) <> "\" Then Archivo = Archivo + "\"
'añadir el nombre del archivo de texto para completar la ruta'
Archivo = Archivo +  "contador.txt"

Si el archivo de texto no existe, se crea con valor de visitas cero.

If Not File.Exists(Archivo) Then
	'File.CreateText(String ruta) crea o abre un archivo para escribir en él. Si el archivo ya existe, se sobreescribe su contenido'
	Escritor = File.CreateText(Archivo)
	'el método StreamWriter.Write(String) escribe una cadena en el archivo'
	Escritor.Write("0")
	Escritor.Close()
End If

Se abre el archivo con StreamReader y se lee todo el contenido que se asigna a una variable (entero) que incrementa su valor en 1 y el nuevo valor pasa a otra variable (cadena) que con StreamWriter se graba en el archivo de texto.

'el método File.OpenText(String) abre un archivo de texto existente para lectura'
Lector = File.OpenText(Archivo)
'el método StreamReader.ReadToEnd lee todos los caracteres desde la posición actual hasta el final'
sCuenta = Lector.ReadToEnd()
Lector.Close()
iCuenta = CInt(sCuenta)
iCuenta = iCuenta + 1
sCuenta = iCuenta.ToString
Escritor = File.CreateText(Archivo)
Escritor.Write(sCuenta)
Escritor.Close()

Finalmente se muestra el número de visitas formateado con el separador de miles.

'mostrar el número de visitas formateado para agrupar por miles'
Etiqueta1.Text =  FormatNumber(iCuenta,0,,,TriState.True)

Número con separador de miles

Para que la cadena numérica aparezca más fácil de leer se puede usar el método

Strings.FormatNumber(Object, Int32, TriState, TriState, TriState)

del espacio de nombres Microsoft.VisualBasic. Se construye con FormatNumber seguido de un paréntesis en el que, separados por comas, aparecen por este orden:

  • expresión Object que se va a formatear, obligatoria
  • NumDigitsAfterDecimal Int que es el nº de posiciones decimales, opcional
  • IncludeLeadingDigit TriState constante que indica si se muestra cero inicial para valores fraccionarios, opcional
  • UseParensForNegativeNumbers TriState constante que indica si los valores negativos van entre paréntesis, opcional
  • GroupDigits TriState constante que indica si los números se agrupan o no mediante el delimitador de grupo, opcional.

Ejecutar la aplicación

Para probar la aplicación en modo local en nuestro propio ordenador hay que incluir los 3 archivos en una carpeta que se puede llamar contadortxt, colocar esa carpeta en la carpeta del servidor web, no es necesario convertirla en aplicación web si usas IIS, y dirigir el navegador a

http://localhost/contadortxt/contadortxt.aspx

Puedes descargar los 3 archivos completos desde aquí.