2012-08-17 52 views
9

我見過一些與我的問題有關的帖子,但沒有一篇完全解決它。我需要在標準臨時目錄中創建一個文件,並在完成寫入後將其移至其他位置。這個想法是該文件在下載完成後被認爲是暫時的,並且被永久保存。如何獲取臨時文件名?

我試圖通過調用mkstemptmpfile,然後rename寫完之後。但是,我需要文件的完整路徑來調用重命名,顯然從文件描述符(由mkstemp返回)或FILE *(由tmpfile返回)獲取文件名不是一個簡單的過程。它可以完成,但它不是優雅的。

是否有系統調用會創建臨時文件並提供給我名稱?我知道mktemp和相關的電話,但它們要麼不保證是唯一的,要麼被棄用。或者也許有更好的方法來完成創建,寫入和移動臨時文件。

回答

10

看起來像mkstemp實際上是要走的路。

int fd; 
char name[] = "/tmp/fileXXXXXX"; 
fd = mkstemp(name); 
/* Check fd. */ 

此調用後,您有fd有效的描述符和name相關文件的名稱。

+0

你是對的,當我閱讀文檔時我需要更徹底。打電話給我強迫症,但我用[這篇文章](http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu)的信息獲取臨時文件夾,而不是簡單的硬編碼「/ tmp」; – jorgander 2012-08-17 15:59:17

+0

如果要創建一個文件在/ tmp /然後你正打算將文件移動到特定的位置說:「/家/ /然後將需要很長時間才能CP或移動,這將是更壞,如果/ tmp和/家/是在不同的分區區域,所以更好地創造在/ home//fileXXXXX文件,並將其重命名爲/ home/ /文件 – Viswesn 2012-08-17 17:56:51

+0

什麼是最終的文件名 – 2015-09-20 17:13:05

相關問題