.NET

Enumeraciones de Folders Especiales en .NET – System.Environment.SpecialFolder

System.Environment.SpecialFolder

System.Environment.SpecialFolder

He visto demasiados programas, utilerías y software en general que todavía intentan adivinar o equivocadamente predefinen el path o ruta a folders especiales de Windows, como Program Files, Documents and Settings, etc. Esto puede resultar en dos cosas, cualquiera de las dos muy molestas y muy mal vistas:

  1. El programa no funciona.
  2. El programa termina creando folders no deseados en el sistema.

El #2 es especialmente molesto…¿para que sirve que instale Windows en Ingles, si un programa mal hecho va a terminar creando H:\Archivos de Programa de todas maneras?

Es simplemente pésimo diseño de software el asumir y programar software contra la suposición de que el usuario que está corriendo nuestra aplicación instaló Windows en el mismo Disco Lógico que nosotros. Las empresas generalmente instalan Windows en cualquier directorio excepto C:\Windows, precisamente porque muchos virus, troyanos, etc. fabricados por amateurs solo intentan instalarse contra C:\Windows, así que instalar Windows en un directorio diferente al predeterminado es una simple protección extra. Es por esto que un desarrollador nunca debe intentar adivinar la ruta a un folder especial de Windows.

Microsoft, en el namespace System, provee un metodo y una enumeration en conjunto que permite obtener directamente de Windows el path/ruta a varios folders especiales de Windows:

El metodo es estático, y se llama Environment.GetFolderPath, que recibe como parámetro un enum de tipo Environment.SpecialFolder.

Los valores del enumeration Environment.SpecialFolder son:

  1. ApplicationData
  2. CommonApplicationData
  3. Cookies
  4. Desktop
  5. Favorites
  6. History
  7. InternetCache
  8. Programs
  9. MyComputer
  10. MyMusic
  11. MyPictures
  12. Recent
  13. SendTo
  14. StartMenu
  15. Startup
  16. System
  17. Templates
  18. DesktopDirectory
  19. Personal
  20. MyDocuments
  21. ProgramFiles
  22. CommonProgramFiles

Ver detalles en MSDN sobre System.Environment.SpecialFolders

Ver detalles en MSDN sobre System.Environment.GetFolderPath

La forma correcta de obtener el path al folder de Program Files, seria entonces:

string programFilesPath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

lo cual, en mi sistema, resultaría en “H:\Program Files”.

LINQ is NOT LINQ To SQL

.NET Logo

.NET Logo

Los que no sepan que es LINQ...les conviene leer este post, de Justin Etheredge, que aclara las confusiones entre la tecnologia LINQ (Language INtegrated Query) y el ORM LINQ To SQL.

LINQ is NOT LINQ To SQL – Justin Etheredge, CodeThinked

Como escribir archivos temporales en el Framework .NET

Hace poco estuve optimizando una aplicación web que desarrollé usando .NET 1.1. have muchos años. Y por optimizar me refiero a actualizarla a .NET 3.5 y mejorar la calidad del código, ya que esa aplicación fue desarrollada cuando todavía estaba en la escuela.

Parte de la optimización fue mejorar la funcionalidad de manejar archivos temporales. La aplicación generaba reportes en PDF, y para poder integrar unas gráficas al archivo PDF, primero tenía que guardarlas a disco.

No sé si en esa versión del .NET Framework no existían las nuevas funciones ahora utilizo, o si simplemente no eran tan conocidas, pero en aquel momento tuve que escribir mis propias funciones para obtener un nombre único de archivo (usando Date.Now.Ticks, mezclado con otras variables) y tambien tuve que crear un directorio temporal dentro de la aplicación, para poder escribir los archivos ahi y después borrarlos.

.NET tiene ahora 2 funciones muy buenas para facilitar el trabajo del programador:

1. System.IO.Path.GetTempFileName() – Regresa un string con el path completo de un nombre único para un archivo temporal. Por ejemplo: C:\Documents and Settings\Gabriel\Local Settings\Temp\tmp16A.tmp. Como pueden ver, ni siquiera tuve que molestarme en conseguir el path del folder temporal del sistema. Esta función me regresa todo ya concatenado.

2. System.IO.Path.GetTempPath() – obtiene el nombre del folder (o carpeta, o directorio, como le quieran llamar) temporal del sistema, donde no es necesario tener permisos especiales para poder escribir archivos. Lo cual es una ventaja porque no hay que asegurarse o preocuparse de que el usuario ASPNET tenga privilegios, como antes.

Otra ventaja es que si escribimos nuestros archivos temporales a la carpeta de Archivos temporales del sistema, Windows borrará automaticamente los archivos la próxima vez que el sistema se reinicie. Claro, esto puede servir para Thin Applications (aplicaciones que corren del lado del cliente), pero no debemos confiarnos de esto si estamos ejecutando este código en el servidor, ya que en teoría nunca se reinician, o toman muchísimo más tiempo y podríamos saturar el disco.

Espero les sirva.

WCF: Comparacion de BasicHttpBinding y WSHttpBinding

Microsoft .NET Framework

Microsoft .NET Framework

Estoy experimentando con diferentes settings para configurar unos WCF Services y me tope con este articulo…definitivamente interesante para cualquiera que trabaje con Windows Communication Foundation.

El articulo habla sobre las diferencias de seguridad, confiabilidad y estabilidad del binding WSHttpBinding contra el BasicHttpBinding.

WCF : BasicHttpBinding compared to WSHttpBinding at SOAP packet level

1 4 5 6 7  Scroll to top