AppData 直下の Local, LocalLow, Roaming フォルダの違い
AppData 直下の Local, LocalLow, Roaming フォルダの違い
Windows の AppData フォルダ直下には「Local」「LocalLow」「Roaming」の3つのフォルダがある。
それぞれの違いは何だろうか?
Local/LocalLow と Roaming フォルダの用途
「Local」と「LocalLow」フォルダには、個人設定(ローカル設定)が保存される。
ファイルサイズが大きく、ユーザーとともに移動するには負担が大きいファイルが使用する。
Local と LocalLow はアクセスするプロセスの信頼度の差によって使い分けられる。
相対的に危険度の高いプロセスが LocalLow を使うことになっている。
これらのフォルダは WindowsXP では %USERPROFILE%\Local Settings
だった。
「Roaming」フォルダにはアプリケーションデータが保存される。
ユーザーとともに別のコンピューターへ移動できるファイルが使用する。
WindowsXP では %USERPROFILE%\Application Data
だった。
付録 - C# でそれぞれのフォルダを取得する方法
次のいずれかの方法で取得できる。
Environment.GetFolderPath
メソッドを使う- 環境変数から取得する
Roaming フォルダの取得
GetFolderPath メソッドの引数に Environment.SpecialFolder.ApplicationData を指定する。
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
// → C:\Users\username\AppData\Roaming
環境変数「APPDATA」から取得することもできる。
var path = System.Environment.GetEnvironmentVariable("APPDATA");
// → C:\Users\username\AppData\Roaming
Local フォルダの取得
GetFolderPath メソッドの引数に Environment.SpecialFolder.LocalApplicationData を指定する。
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
// → C:\Users\username\AppData\Local
環境変数「LOCALAPPDATA」から取得することもできる。
var path = System.Environment.GetEnvironmentVariable("LOCALAPPDATA");
// → C:\Users\username\AppData\Local
LocalLow フォルダの取得
Environment.SpecialFolder 列挙型には LocalLow フォルダを表すフィールドが存在しないため、GetFolderPath メソッドで直接取得することはできない。
また環境変数にも LocalLow フォルダは定義されていない。
したがって、LocalLow フォルダの取得にはひと手間かける必要がある。
たとえば Local のパスに “Low” を連結する。
あるいは Roaming のパスを取得してから Roaming の部分を LocalLow に置換する。
安全なのは前者の “Low” を連結する方法だろうか。
置換する方法は、意図しない部分に Roaming が入っていた場合、その部分まで LocalLow になってしまう。
まー、ほぼあり得ないと思うが。
“Low” を連結するサンプル
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData) + "Low";
// → C:\Users\username\AppData\LocalLow
“Roaming” を “LocalLow” に置換するサンプル
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData)
.Replace("Roaming", "LocalLow");
// → C:\Users\username\AppData\LocalLow
LocalLow フォルダを使う機会がそれほどあるか? というのもあるが、ひとまずこれで OK 。
付録2 - Windows PowerShell で特殊フォルダを取得する方法
実行環境は Windows PowerShell 5.1 。
PS C:\Users\username> $host
Name : ConsoleHost
Version : 5.1.19041.4412
InstanceId : bb8e379a-11a3-40d7-b8c6-72c5b240a631
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : ja-JP
CurrentUICulture : ja-JP
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled : True
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
.NET Framework の機能を使うため、C# と多少構文が異なるだけでやっていることは同じである。
Roaming フォルダの取得
PS C:\Users\username> [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::ApplicationData)
C:\Users\username\AppData\Roaming
PS C:\Users\username> [System.Environment]::GetEnvironmentVariable("APPDATA")
C:\Users\username\AppData\Roaming
Local フォルダの取得
PS C:\Users\username> [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::LocalApplicationData)
C:\Users\username\AppData\Local
PS C:\Users\username> [System.Environment]::GetEnvironmentVariable("LOCALAPPDATA")
C:\Users\username\AppData\Local
LocalLow フォルダの取得
PS C:\Users\username> [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::LocalApplicationData) + "Low"
C:\Users\username\AppData\LocalLow
付録3 - VBScript で特殊フォルダを取得する方法
Roaming フォルダの取得
Shell オブジェクトの SpecialFolders メソッド、または環境変数より取得する。
With CreateObject("WScript.Shell")
WScript.Echo .SpecialFolders("AppData")
WScript.Echo .ExpandEnvironmentStrings("%APPDATA%")
' → C:\Users\username\AppData\Roaming
End With
Local フォルダの取得
SpecialFolders メソッドでは Local フォルダを取得できなかった。
代わりに環境変数より取得する。
With CreateObject("WScript.Shell")
WScript.Echo .SpecialFolders("LocalAppData")
' → 空文字が返ってきた
WScript.Echo .ExpandEnvironmentStrings("%LOCALAPPDATA%")
' → C:\Users\username\AppData\Local
End With
LocalLow フォルダの取得
With CreateObject("WScript.Shell")
WScript.Echo .ExpandEnvironmentStrings("%LOCALAPPDATA%") & "Low"
' → C:\Users\username\AppData\LocalLow
End With
参考ページ
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?