Windows XP/Vista で一時ファイルへのパスを作成する方法
-
01-07-2019 - |
質問
これを行うための最良の方法は何ですか?tmpnam() はドライブのルートにあるファイルへのパスを返しますが、Windows Vista では管理者権限が必要なため、これはオプションではありません。
解決
GetTempPath そして GetTempFileName 機能するはずです。
他のヒント
Windows の環境変数 %TEMP% は、ユーザーの一時ディレクトリを指します。
マネージド C++ では、 Path::GetTempFileName() を呼び出すことができます。これにより、ユーザーの一時ディレクトリに一時ファイルが作成されます (これは Path::GetTempPath() を使用して見つけることができます)。GetTempFileName() は基本的に、GUID をファイル名として使用して、%TEMP% パス内のファイルへのパスを提供するだけです。次に、そのパスを使用してファイルを作成し、それに対して必要な処理を実行します。現在のプロセスの環境変数にアクセスできる言語であれば、同様のロジックを実行できます。
お役に立てば幸いです。
マーティン。
環境変数 TEMP と TMP を誰でも書き込み可能なディレクトリに設定して試してみましたか?XP (Vista には慣れていません) で環境変数を変更するには、システムのプロパティ、[詳細設定] タブ、[環境変数] ボタンに移動します。
おそらく、kernel32.dll の Win32 メソッド GetTempPath() を使用できるでしょう。これは、System.IO.Path.GetTempFileName() によって .NET にラップされます。
XP では、これにより C:\Documents and Settings\username\Local Settings emp\ のパスが返されるため、管理者権限は必要ありません。
相互運用性を重視する場合は、tmpnam のマニュアル ページで次のことが提案されています。
tmpnam のマニュアルページ
BUGS
Never use this function. Use mkstemp(3) instead.
mkstemp のマニュアルページ
SYNOPSIS
#include <stdlib.h>
int mkstemp(char *template);
DESCRIPTION
The mkstemp() function generates a unique temporary file name from template. The last six characters of template must be
XXXXXX and these are replaced with a string that makes the filename unique. The file is then created with mode read/write
ただし、これらはすべて、TMP 環境変数の内容をプレフィックスとして付けたテンプレートを準備したことを示しています。