メイン画像

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

参考ページ


アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。