File io 如何获取D2中file.tmpfile创建的临时文件的名称?

File io 如何获取D2中file.tmpfile创建的临时文件的名称?,file-io,d,File Io,D,我需要生成一个临时文件,用一些数据填充它,并将其提供给外部程序。根据对可用数据的描述,我使用File.tmpfile方法: 它不提供获取生成的文件名的方法。据文件记载,该名称可能为空。在Python中,我会这样做: (o_fd, o_filename) = tempfile.mkstemp('.my.own.suffix') 在D2中是否有一种简单、安全和跨平台的方法可以做到这一点?由于tmpfile的工作方式,如果您需要文件名,则无法使用它。但是,我已经创建了一个模块来处理临时文件。它使用条

我需要生成一个临时文件,用一些数据填充它,并将其提供给外部程序。根据对可用数据的描述,我使用File.tmpfile方法:

它不提供获取生成的文件名的方法。据文件记载,该名称可能为空。在Python中,我会这样做:

(o_fd, o_filename) = tempfile.mkstemp('.my.own.suffix')
在D2中是否有一种简单、安全和跨平台的方法可以做到这一点?

由于tmpfile的工作方式,如果您需要文件名,则无法使用它。但是,我已经创建了一个模块来处理临时文件。它使用条件编译来决定查找临时目录的方法。在windows上,它使用%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。默认为写入权限

需要注意的是,随机生成的文件名并不是真正随机的,因为种子是在编译时设置的

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");
}