2012-07-24 48 views
-1

我想通过调用tmpfnam函数来获取临时文件名并使用它创建写入文件,但我的C++程序中创建了一个临时文件代码无法创建临时文件。然而,当我使用用户提供的文件名或字符串常量而不是使用来自tmpfnam的临时名称时,文件创建工作得非常好。这里有一个例子:无法在Windows上用C++创建临时文件使用tmpfnam

std::tmpnam(fname); //does not work 
std::fstream f(fname,std::ios::out); 

char* fname = "myfile.txt"; //works 
std::fstream f(fname,std::ios::out); 

我查了一下,在壳体2中的文件在同一目录下的源文件被创建,但不是在情况1.我试图运行在管理员权限的程序,以及仍然没有运气 。任何想法为何如此?

+0

你传递给'tmpnam'的是什么?足够大吗? – cnicutar 2012-07-24 20:02:24

+1

我觉得你能够写入与可执行文件相同的目录是令人惊讶的。可执行文件不得位于受保护的位置。 – 2012-07-24 20:02:50

+0

@cnicutar'fname'被声明为大小'L_tmpnam',所以它应该可以正常工作。 – adi 2012-07-24 20:09:47

回答

1

你试过了吗this的方式?

char fname[L_tmpnam]; 
if (std::tmpnam(fname)) { 
    std::fstream f(fname,std::ios::out); 
    // ... 
} 

希望它有帮助。

+0

我试过这种方式,和std :: tmpnam确实返回NULL。但是,如何创建临时文件? – adi 2012-07-24 20:19:50

+0

@adi您可以尝试旧的C备用'tempnam'(请参阅:[Open Group](http://pubs.opengroup.org/onlinepubs/007904875/functions/tempnam.html)或[Microsoft](http:// msdn.microsoft.com/en-us/library/hs3e7355(v=vs.110).aspx)) – 2012-07-28 00:15:03

+0

谢谢杰弗里,但我发现'tmpfnam'会返回一个临时文件名,前面加'\',因为windows在文件名中不允许'\',我的fstream对象无法创建文件。 – adi 2012-07-28 06:42:49

相关问题