質問

これを行うための最良の方法は何ですか?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 環境変数の内容をプレフィックスとして付けたテンプレートを準備したことを示しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top