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”.

2 Responses to Enumeraciones de Folders Especiales en .NET – System.Environment.SpecialFolder
  1. Arturo Caballero

    Muy buen tip Gabo, esta clase viene desde el .Net 1.1?? no lo conocia.

    Saludos!!

  2. Gabriel

    Hey, gracias Arturo. No estoy seguro si viene desde 1.1…al menos me fui checando la misma version de la MSDN page para 3.0 y 2.0 y si estaba… pero definitivamente es muy bueno que MS haya creado ese enum.

    Saludos!

Leave a Reply

Your email address will not be published. Please enter your name, email and a comment.