23 abr 2009

De Arreglo de bytes a Archivo

Hace un par de días subí como convertir una archivo a un arreglo de bytes. Ahora toca la operación inversa. Es realmente muy sencillo, lo único que debemos tener en cuenta son las cuestiones de permisos a la hora de guardar el archivo en nuestra estructura de directorios, pero para esto ya podemos impersonar temporalmente.
protected void guardaArchivo(byte[] archivo, string nombreArchivo)
{
    string excel_path = ConfigurationManager.AppSettings.Get("EXCELPATH");      
    string excel_file = nombreArchivo;

    try
    {
      excel_path = excel_path + excel_file;

      FileStream archivo_fisico = new FileStream(excel_path, FileMode.Create, FileAccess.Write);
      foreach (byte b in archivo)
      {
          archivo_fisico.WriteByte(b);
      }
      archivo_fisico.Close();
    }
    catch (Exception ex)
    {
      throw ex;
    }     
}
Ya con esto cerramos el circulo de pasar un archivo por diversas capas físicas si fuera necesario.


EDITO:
Felipo me indico que otra forma de hacerlo puede ser
byte[] buffer; //parameter

using (FileStream newFile = new FileStream(newFilePath, FileMode.Create, FileAccess.Write))
{
    newFile.Write(buffer, 0, buffer.Length);
    newFile.Flush();
    newFile.Close();
}

Gracias Felipo.

21 abr 2009

De Archivo a arreglo de bytes

La cuestión era que necesitaba tomar un archivo de un control FileUpload de ASP.Net y transformarlo a un arreglo de bytes y pasárselo a un web service que hiciera el proceso inverso (pasar del arreglo de bytes al archivo) . Así fue como resolví la primera parte:

Primero un import de System.IO seguidamente algo similar a esto en el método en que se requería:
Stream sr = fupArchivo.PostedFile.InputStream;
int Length = 256;
byte[] buffer = new byte[Length];
ArrayList list = new ArrayList();
int bytesRead = sr.Read(buffer, 0, Length);
while (bytesRead > 0)
{
     foreach (byte b in buffer)
     {
          list.Add(b);
     }
     bytesRead = sr.Read(buffer, 0, Length);
}
byte[] Archivo = (byte[])list.ToArray(typeof (byte));
webservice.cargaArchivo(Archivo);

En un próximo post el proceso inverso.

1 abr 2009

Cómo crear una red virtual con Virtual PC

Supongamos que tenemos una máquina virtual con nuestro ambiente de desarrollo y otro máquina virtual con una base de datos. Queremos que ambas máquinas funcionen como si estuvieran en red junto con el host. Sin embargo nuestro host no tiene tarjeta de red o la tiene pero no tiene acceso a ninguna red en este momento.

A continuación una guía paso a paso para windows XP como host y virtual PC 2007:

Primero necesitamos instalar en el equipo host el Adaptador de Bucle Invertido de micrsoft (Micrsoft Loopback Adapter):
  • Vamos a Panel de control -> agregar hardware.
  • En el wizard que nos sale indicamos que ya hemos conectado el hardware, en la siguiente pantalla elegimos la ultima opción "Agregar un nuevo dispositivo de hardware", en la siguiente "Instalar el hardware seleccionándolo manualmente de una lista(avanzado)". Seguidamente seleccionamos adaptadores de red. Finalmente elegimos el fabricante Microsoft y Adaptador de bucle invertido de Microsoft y completamos la instalación.

Con lo anterior instalamos una especie de tarjeta de red virtual en nuestro equipo, por lo que si inmediatamente le damos botón derecho sobre Mis Sitios de Red -> Propiedades, Nos debe aparecer una nueva conexión de red que utiliza el adaptador que acabamos de instalar. Esta conexión la configuramos de manera que no choque con alguna otra conexión (si tenemos otra activa) Por ejemplo como sigue:


Una vez finalizada esta conexión iniciamos virtual PC 2007 y vamos a la configuración de red de las máquinas virtuales y elegimos que utilicen el adaptador de bucle invertido:


Seguidamente iniciamos las máquinas virtuales y vamos a las conexiones de red y configuramos el TCP/IP para que pueda ver a las otras maquinas. Por ejemplo:


Debe asegurarnos que todas las máquinas pertenezcan al mismo dominio o grupo de trabajo, tanto el host como las máquinas virtuales para que puedan "verse" entre si. Esto debería bastar para montar una red virtual con Virtual PC 2007.