Según tengo entendido, se supone que debe usar el Environment.GetFolderPath
método para tener un código independiente del sistema operativo ...
Usos de Windows XP C:\Documents and Settings\
. Windows Vista usa C:\ProgramData
y C:\Users
.
Estoy usando el siguiente código en una computadora con Windows Vista y está devolviendo un C:\Documents and Settings\
directorio en lugar de C:\ProgramData
lo que debería ... ¿Alguna idea?
string commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
try
{
File.CreateText(
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) +
"\\mycompany\\uid");
log.Debug("Created file successfully");
}
catch (Exception ex)
{
log.Error("Unable to create the uid file: ", ex);
}
Respuestas:
Mi instalador copió un archivo log.txt que se había generado en una computadora XP. Estaba mirando ese archivo de registro pensando que se generó en Vista. Una vez que arreglé mi configuración de log4net para que sea "Compatible con Vista". Environment.GetFolderPath devolvía los resultados esperados. Por tanto, cierro este post.
La siguiente referencia de ruta de SpecialFolder puede resultar útil:
Salida en Windows Server 2003:
Salida en Vista:
fuente
Environment.SpecialFolder.CommonApplicationData
por alguna razón regresaCommonApplicationData
. y, por lo tanto, está creando las carpetas en la ruta de la aplicación en síEnvironment.SpecialFolder.CommonApplicationData
es una enumeración; debe llamarEnvironment.GetFolderPath()
para devolver la ruta, por ejemploEnvironment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
.Salida en Ubuntu 9.10 -> Ubuntu 12.04 con mono 2.10.8.1:
Salida en Ubuntu 16.04 con mono 4.2.1
donde $ USER es el usuario actual
Salida en Ubuntu 16.04 usando dotnet core (3.0.100)
Salida en Android 6 usando Xamarin 7.2
Environment.SpecialFolder.ApplicationData: /data/user/0/$APPNAME/files/.config Environment.SpecialFolder.CommonApplicationData: /usr/share Environment.SpecialFolder.ProgramFiles: Environment.SpecialFolder.DesktopDirectory: /data/user/0/$APPNAME/files/Desktop Environment.SpecialFolder.LocalApplicationData: /data/user/0/$APPNAME/files/.local/share Environment.SpecialFolder.MyDocuments: /data/user/0/$APPNAME/files Environment.SpecialFolder.Desktop: /data/user/0/$APPNAME/files/Desktop Environment.SpecialFolder.Personal: /data/user/0/$APPNAME/files Environment.SpecialFolder.Startup: Environment.SpecialFolder.Recent: Environment.SpecialFolder.SendTo: Environment.SpecialFolder.StartMenu: Environment.SpecialFolder.MyMusic: /data/user/0/$APPNAME/files/Music Environment.SpecialFolder.MyVideos: /data/user/0/$APPNAME/files/Videos Environment.SpecialFolder.MyComputer: Environment.SpecialFolder.NetworkShortcuts: Environment.SpecialFolder.Fonts: /data/user/0/$APPNAME/files/.fonts Environment.SpecialFolder.Templates: /data/user/0/$APPNAME/files/Templates Environment.SpecialFolder.CommonStartMenu: Environment.SpecialFolder.CommonPrograms: Environment.SpecialFolder.CommonStartup: Environment.SpecialFolder.CommonDesktopDirectory: Environment.SpecialFolder.PrinterShortcuts: Environment.SpecialFolder.InternetCache: Environment.SpecialFolder.Cookies: Environment.SpecialFolder.History: Environment.SpecialFolder.Windows: Environment.SpecialFolder.MyPictures: /data/user/0/$APPNAME/files/Pictures Environment.SpecialFolder.UserProfile: /data/user/0/$APPNAME/files Environment.SpecialFolder.SystemX86: Environment.SpecialFolder.ProgramFilesX86: Environment.SpecialFolder.CommonProgramFiles: Environment.SpecialFolder.CommonProgramFilesX86: Environment.SpecialFolder.CommonTemplates: /usr/share/templates Environment.SpecialFolder.CommonDocuments: Environment.SpecialFolder.CommonAdminTools: Environment.SpecialFolder.AdminTools: Environment.SpecialFolder.CommonMusic: Environment.SpecialFolder.CommonPictures: Environment.SpecialFolder.CommonVideos: Environment.SpecialFolder.Resources: Environment.SpecialFolder.LocalizedResources: Environment.SpecialFolder.CommonOemLinks: Environment.SpecialFolder.CDBurning:
Donde $ APPNAME es el nombre de su aplicación Xamarin (por ejemplo, MyApp.Droid)
Salida en iOS Simulator 10.3 usando Xamarin 7.2
Donde $ DEVICEGUID es el GUID del simulador (dependiendo del simulador seleccionado)
Salida en ipad 10.3 usando Xamarin 7.2
SpecialFolder.MyDocuments: /var/mobile/Containers/Data/Application/$APPLICATIONGUID/Documents
Salida en ipad 13.3 usando Xamarin 16.4
SpecialFolder.MyDocuments: /var/mobile/Containers/Data/Application/$APPLICATIONGUID/Documents SpecialFolder.UserProfile: /private/var/mobile/Containers/Data/Application/$APPLICATIONGUID/Documents
Salida en Windows 10 usando .net core 3.1
Salida en Ubuntu 18.04 usando .net core 3.1
Salida en MacOS Catalina usando .net core 3.1
fuente
Salida en Windows 10
Fonts: C:\Windows\Fonts CommonStartMenu: C:\ProgramData\Microsoft\Windows\Start Menu CommonPrograms: C:\ProgramData\Microsoft\Windows\Start Menu\Programs CommonStartup: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup CommonDesktopDirectory: C:\Users\Public\Desktop CommonApplicationData: C:\ProgramData Windows: C:\Windows System: C:\Windows\system32 ProgramFiles: C:\Program Files (x86) SystemX86: C:\Windows\SysWOW64 ProgramFilesX86: C:\Program Files (x86) CommonProgramFiles: C:\Program Files (x86)\Common Files CommonProgramFilesX86: C:\Program Files (x86)\Common Files CommonTemplates: C:\ProgramData\Microsoft\Windows\Templates CommonDocuments: C:\Users\Public\Documents CommonAdminTools: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools CommonMusic: C:\Users\Public\Music CommonPictures: C:\Users\Public\Pictures CommonVideos: C:\Users\Public\Videos Resources: C:\Windows\resources LocalizedResources: CommonOemLinks:
Fragmento de código si desea registrar el suyo
foreach(Environment.SpecialFolder f in Enum.GetValues(typeof(Environment.SpecialFolder))) { string commonAppData = Environment.GetFolderPath(f); Console.WriteLine("{0}: {1}", f, commonAppData); } Console.ReadLine();
fuente
Salida en Windows 7 (64 bits)
SpecialFolder.CommonApplicationData: C:\ProgramData SpecialFolder.CommonDesktopDirectory: C:\Users\Public\Desktop SpecialFolder.CommonStartMenu: C:\ProgramData\Microsoft\Windows\Start Menu SpecialFolder.CommonPrograms: C:\ProgramData\Microsoft\Windows\Start Menu\Programs SpecialFolder.CommonProgramFiles: C:\Program Files\Common Files SpecialFolder.CommonProgramFilesX86: C:\Program Files (x86)\Common Files SpecialFolder.CommonStartup: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup SpecialFolder.ProgramFiles: C:\Program Files SpecialFolder.ProgramFilesX86: C:\Program Files (x86) SpecialFolder.System: C:\Windows\system32 SpecialFolder.SystemX86: C:\Windows\SysWOW64
Salida en Windows XP
fuente
Estaba buscando una lista de macOS pero no encontré nada, tal vez esto ayude a alguien.
Salida en macOS Catalina (10.15.7) usando net5.0
# SpecialFolders (Only with value) SpecialFolder.ApplicationData: /Users/$USER/.config SpecialFolder.CommonApplicationData: /usr/share SpecialFolder.Desktop: /Users/$USER/Desktop SpecialFolder.DesktopDirectory: /Users/$USER/Desktop SpecialFolder.Favorites: /Users/$USER/Library/Favorites SpecialFolder.Fonts: /Users/$USER/Library/Fonts SpecialFolder.InternetCache: /Users/$USER/Library/Caches SpecialFolder.LocalApplicationData: /Users/$USER/.local/share SpecialFolder.MyDocuments: /Users/$USER SpecialFolder.MyMusic: /Users/$USER/Music SpecialFolder.MyPictures: /Users/$USER/Pictures SpecialFolder.ProgramFiles: /Applications SpecialFolder.System: /System SpecialFolder.UserProfile: /Users/$USER # SpecialFolders (All) SpecialFolder.AdminTools: SpecialFolder.ApplicationData: /Users/$USER/.config SpecialFolder.CDBurning: SpecialFolder.CommonAdminTools: SpecialFolder.CommonApplicationData: /usr/share SpecialFolder.CommonDesktopDirectory: SpecialFolder.CommonDocuments: SpecialFolder.CommonMusic: SpecialFolder.CommonOemLinks: SpecialFolder.CommonPictures: SpecialFolder.CommonProgramFiles: SpecialFolder.CommonProgramFilesX86: SpecialFolder.CommonPrograms: SpecialFolder.CommonStartMenu: SpecialFolder.CommonStartup: SpecialFolder.CommonTemplates: SpecialFolder.CommonVideos: SpecialFolder.Cookies: SpecialFolder.Desktop: /Users/$USER/Desktop SpecialFolder.DesktopDirectory: /Users/$USER/Desktop SpecialFolder.Favorites: /Users/$USER/Library/Favorites SpecialFolder.Fonts: /Users/$USER/Library/Fonts SpecialFolder.History: SpecialFolder.InternetCache: /Users/$USER/Library/Caches SpecialFolder.LocalApplicationData: /Users/$USER/.local/share SpecialFolder.LocalizedResources: SpecialFolder.MyComputer: SpecialFolder.MyDocuments: /Users/$USER SpecialFolder.MyMusic: /Users/$USER/Music SpecialFolder.MyPictures: /Users/$USER/Pictures SpecialFolder.MyVideos: SpecialFolder.NetworkShortcuts: SpecialFolder.PrinterShortcuts: SpecialFolder.ProgramFiles: /Applications SpecialFolder.ProgramFilesX86: SpecialFolder.Programs: SpecialFolder.Recent: SpecialFolder.Resources: SpecialFolder.SendTo: SpecialFolder.StartMenu: SpecialFolder.Startup: SpecialFolder.System: /System SpecialFolder.SystemX86: SpecialFolder.Templates: SpecialFolder.UserProfile: /Users/$USER SpecialFolder.Windows:
Reemplacé mi nombre de usuario con $ USER.
Fragmento de código de pogosama .
foreach(Environment.SpecialFolder f in Enum.GetValues(typeof(Environment.SpecialFolder))) { string commonAppData = Environment.GetFolderPath(f); Console.WriteLine("{0}: {1}", f, commonAppData); } Console.ReadLine();
fuente