私はいくつかの一時ファイルを保存する必要があるアプリケーションを書いています(私は環境変数を通して一時的な場所を見つけています)。
環境変数は可変であると理解しています。つまり、存在する場合と存在しない場合がありますが、他の変数よりも安全に信頼できるものはありますか?
たとえば、私はAPPDATA
Windows 7で使用できますが、WindowsXPでは必ずしも使用できるとは限りません。
私はいくつかの一時ファイルを保存する必要があるアプリケーションを書いています(私は環境変数を通して一時的な場所を見つけています)。
環境変数は可変であると理解しています。つまり、存在する場合と存在しない場合がありますが、他の変数よりも安全に信頼できるものはありますか?
たとえば、私はAPPDATA
Windows 7で使用できますが、WindowsXPでは必ずしも使用できるとは限りません。
環境を直接使用する代わりに、.NETAPIが提供できるサポートの一部を使用することをお勧めします。一時ファイルには2つの機能があります。
Path.GetTempPath()
現在のユーザーの一時フォルダのパスを返します。
Path.GetTempFileName()
ユーザーの一時フォルダに一意の名前の空のファイルを作成します。
一時フォルダは、実際にはWindowsのGetTempPath関数を使用して環境を使用して検出されます。通常、フォルダはになりますC:\Users\UserName\AppData\Local\Temp
。
自分で使用するアプリケーション固有のフォルダーが必要な場合は、特別なフォルダーを使用できます。
const String CompanyName = "Acme Industries";
const String ApplicationName = "FooBar";
var subfolderName = Path.Combine(CompanyName, ApplicationName);
var folderName = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
subfolderName
);
Directory.CreateDirectory(folderName);
通常、作成されるフォルダの名前はC:\Users\UserName\AppData\Acme Industries\FooBar
です。アプリケーションはこのフォルダを自由に使用でき、「読み取り専用」の問題が発生することはありません。
標準APIに依存することで、アプリケーションをさまざまなバージョンのWindowsおよびさまざまな環境(ターミナルサーバーなど)で確実に実行できます。
目的のために環境変数を使用しないことを強くお勧めします。
環境変数を使用する必要があると思われる場合は、使用する必要のあるホストでこれらの変数を手動で定義することをお勧めします。
異なるホストには、異なるセキュリティ設定と異なる目的を持つ他のフォルダーを指す同じ環境変数がある場合があります。
ファイルのパスには %temp% または以下のコードを使用できます。
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".FileExtension";
また
string fileName = System.IO.Path.GetTempPath() + "FileName.FileExtension";
または、一時ファイルを作成するためのこのリンクを試してください: http://www.daveoncsharp.com/2009/09/how-to-use-temporary-files-in-csharp/