2012-02-21 9 views
0

一時ファイルを生成し、それに何らかのデータを入力して外部プログラムに供給する必要があります。生成されたファイル名を取得する方法を提供していませんD2のFile.tmpfileで作成された一時ファイルの名前を取得する方法は?

auto f = File.tmpfile(); 
writeln(f.name()); 

:Dの説明利用可能hereに基づいて、私は​​メソッドを使用しています。 nameが空である可能性があることが記録されています。

(o_fd, o_filename) = tempfile.mkstemp('.my.own.suffix') 

D2でそれを行うための単純な、安全で、クロスプラットフォームな方法があります:Pythonで私はこのようなことをしますか?

答えて

0

どのようにtmpfile()が機能するため、ファイル名が必要な場合は使用できません。しかし、私はすでに一時ファイルを処理するためのモジュールを作成しています。条件付きコンパイルを使用して、一時ディレクトリを見つける方法を決定します。ウィンドウでは、%TMP%環境変数を使用します。 Posixでは、/ tmp /を使用します。

このコードはWTFPLの下でライセンスされているので、あなたはそれを使って何でもできます。

module TemporaryFiles; 
import std.conv, 
     std.random, 
     std.stdio; 

version(Windows) { 
    import std.process; 
} 

private static Random rand; 

/// Returns a file with the specified filename and permissions 
public File getTempFile(string filename, string permissions) { 
    string path; 
    version(Windows) { 
     path = getenv("TMP") ~ '\\'; 
    } else version(Posix) { 
     path = "/tmp/"; 
     // path = "/var/tmp/"; // Uncomment to survive reboots 
    } 
    return File(path~filename, permissions); 
} 

/// Returns a file opened for writing, which the specified filename 
public File getTempFile(string filename) { 
    return getTempFile(filename, "w"); 
} 

/// Returns a file opened for writing, with a randomly generated filename 
public File getTempFile() { 
    string filename = to!string(uniform(1L, 1000000000L, rand)) ~ ".tmp"; 
    return getTempFile(filename, "w"); 
} 

これを使用するには、必要な引数を指定してgetTempFile()を呼び出します。デフォルトでは書き込み許可になります。

「ランダムに生成されたファイル名」は、コンパイル時にシードが設定されるため、本当にランダムではありません。

関連する問題