Volcado Curso de Programación C# Sharp

Lección:

Administración de Archivos


Ejercicio:

Volcado 33


Objetivo:

Cree una utilidad de "volcado": un visor hexadecimal, para mostrar el contenido de un archivo, 16 bytes en cada fila, 24 archivos en cada pantalla (y luego debe detenerse antes de mostrar las siguientes 24 filas).

En cada fila, los 16 bytes deben mostrarse primero en hexadecimal y luego como caracteres (los bytes inferiores a 32 deben mostrarse como un punto, en lugar del carácter no imprimible correspondiente).

Busca "editor hexadecimal" en Google Imágenes, si quieres ver un ejemplo de la apariencia esperada.


Código:

using System;
using System.IO;
public class Dump
{
    public static void Main()
    {
        FileStream file;
        const int SIZE_BUFFER = 16;

        string name = Console.ReadLine();

        try
        {
            file = File.OpenRead(name);
            byte[] data = new byte[SIZE_BUFFER];

            int amount;
            int c = 0;

            string line;
            do
            {
                Console.Write(ToHex(file.Position, 8));
                Console.Write("  ");


                amount = file.Read(data, 0, SIZE_BUFFER);

                for (int i = 0; i < amount; i++)
                {
                    Console.Write(ToHex(data[i], 2) + " ");

                    if (data[i] < 32)
                        line += ".";
                    else
                        line += Convert.ToChar(data[i]);
                }


                if (amount < SIZE_BUFFER)
                {
                    for (int i = amount; i < SIZE_BUFFER; i++)
                    {
                        Console.Write("   ");
                    }
                }

                Console.WriteLine(line);
                line = "";

                c++;
                if (c == 24)
                {
                    Console.ReadLine();
                    c = 0;
                }
            }
            while (amount == SIZE_BUFFER);

            file.Close();
        }
        catch (Exception)
        {
            Console.WriteLine("Error");
        }
    }

    public static string ToHex(int n, int digits)
    {
        string hex = Convert.ToString(n, 16);
        while (hex.Length < digits)
            hex = "0" + hex;
        return hex;
    }
}