Cómo obtener las variables de entorno de Windows con C#

Otro caso con el que me he enfrentado recientemente, cómo crear o copiar archivos a una ruta física con tu servicio web pero haciéndolo portable para cualquier servidor con IIS. Pues la solución fue más sencilla de lo que pensaba. Gracias a un compañero que me sugirió utilizar las variables de entorno, conseguí acceder fácilmente a mi carpeta del IIS creando una variable de entorno y accediendo a ella con C#.


Las variables de entorno son aquellas que nos ofrecen un "atajo" para acceder a algunos directorios del sistema, como Archivos de Programa, simplemente ejecutando en la herramienta de Ejecutar o en la barra de direcciones en una ventana el siguiente código:
%ProgramFiles%
Pues bien, yo me creé la variable %iisdir% para que me abriera /Inetpub/wwwroot/ y así instalar ahí lo que necesitaba.

Para acceder a las variables de entorno desde C# hay que hacer lo siguiente:

Primero añadimos el siguiente using:
using System.Collections;

Luego empezamos a obtener los valores que necesitamos:

//Ruta hasta la carpeta System32 de Windows
Console.WriteLine(Environment.SystemDirectory);

//Nombre de la máquina
Console.WriteLine(Environment.MachineName);

//Ruta del directorio desde donde se está trabajando (Esto ya lo utilizamos en un anterior post del blog)
Console.WriteLine(Environment.CurrentDirectory);

//Sistema operativo y versión
Console.WriteLine(Environment.OSVersion.ToString());

//Todas las variables de entorno y sus valores respectivos
IDictionary variablesEntorno = Environment.GetEnvironmentVariables();
foreach (DictionaryEntry de in variablesEntorno)
{
Console.WriteLine(de.Key+": "+de.Value);
}

//Y para obtener una en concreto de la cual conoces la clave, el ejemplo que yo utilicé, %issdir%:
Console.WriteLine(Environment.GetEnvironomentVariable("issdir"));


Con esto solucioné mi problema y pude acceder a ese directorio fácilmente, eso sí, después de reiniciar, porque hasta que no lo hice la aplicación no reconocía mi nueva variable de entorno.


Obtener el directorio de ejecución de tu aplicación con C# (equivalencia a App.Path)

Hace años ya me enfrenté a este problema y en su día lo solucioné, pero hoy me he vuelto a enfrentar a él y no recordaba cómo era. Lo que sí recordaba era que había varias formas, pero sólo una de ellas era la idónea para mí, para lo que necesitaba hacer en ese momento. Pues bien, ahora me encuentro en  una situación similar a la de entonces y lo que necesito es obtener la ruta de mi aplicación, pero en un formato adecuado para crear/modificar/eliminar archivos allí, es decir, para usar la librería System.IO.File.


Una forma para conocer la ruta es la que más se encuentra si "googleas" un poco:


System.Reflection.Assembly.GetExecutingAssembly(). GetName().CodeBase


Pero te devuelve la ruta en este formato: 
file://C:/Users/...
Con lo cual no es útil para lo que yo lo necesito. Entonces si lo que quiero es obtener la ruta en este formato:
C:\Users\Admin\...
Tengo que hacerlo de esta forma:


Environment.CurrentDirectory


Y con esto ya tengo solucionado el problema. Es similar al App.Path de Visual Basic, fácil de recordar y útil para usar la ruta.




Espero que la próxima vez que tenga que buscar esto mire antes en mi blog :)

Cómo descomprimir archivos .zip en .net (C#)

Después de dos años sin ser actualizado este blog por los miembros del equipo, en concreto unos cuatro o cinco años por mi parte, vuelvo a la carga con un nuevo post.

Debido a cambios en mi vida laboral, después de unos cuantos años vuelvo a retomar la programación en C#, por lo que tengo que refrescar unas cosas y aprender otras nuevas. En la parte de aprender nuevas hoy he descubierto cómo se puede descomprimir un archivo .zip con .NET.

Es muy sencillo, tan solo necesitamos la librería open source SharpZipLib, que podéis encontrar en este enlace  http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx.

Hay que descomprimir el archivo y copiar la .dll en algún directorio de tu proyecto. En concreto he usado la librería que se encuentra en la carpeta "net-20". Entonces agregas la referencia a esta librería (Botón derecho -> Agregar Referencia -> Examinar) y usas un sencillo método:

FastZip fZip = new FastZip();
fZip.ExtractZip(@”C:\miarchivo.zip”, @”C:\Temp”, “”);
El primer argumento es la ruta completa del archivo a descomprimir. El segundo argumento es la ruta donde queremos descomprimir el contenido del archivo. El tercer argumento, que en este caso está vacío, se puede usar para poner expresiones regulares que indiquen qué tipo de archivos queremos descomprimir; si lo dejamos en blanco se extraerán todos los archivos. Un ejemplo de expresión regular para descomprimir sólo las imágenes: “(?i)^.*(?:(?:.jpg)|(?:.png))$” .
 
 
 
Fuente: http://robertoyudice.wordpress.com/2009/05/10/como-descomprimir-archivos-zip-en-net-c/

Edito: Como bien indican en los comentarios, se me olvidó comentar que hay que añadir el "using" de la librería al principio:
using ICSharpCode.SharpZipLib.Zip;
 Gracias por vuestros comentarios.

Buscar este blog

Seguidores

Blogs amigos