2017-04-24 105 views
1

使用重命名時,會使用完整的目錄名稱工作嗎?我似乎無法得到這個例子的工作,儘管所有跡象都表明它應該。有人知道爲什麼例;C重命名函數語法問題

original file location is: /home1/s/j/jb986132/402project4/402project4TEST/checkDirectory.c 
final destination of file is: /home1/s/j/jb986132/402project4/402project4TEST/c/checkDirectory.c 
filename is: checkDirectory.c 
destinationName is: /c/checkDirectory.c 
active is: /home1/s/j/jb986132/402project4/402project4TEST 

可我只是把它寫成:

rename(original file location, final destination) 
+1

你*嘗試了嗎? – abelenky

+0

是的,它不起作用。我正在查看是否有人知道爲什麼,因爲我提供完整的目錄名稱。 – carlough

+0

請發表[mcve]。 –

回答

0

事實上,標準本身已很少在允許參數的功能有什麼說什麼,它只是說:

rename函數使得名稱爲old指向的字符串的文件從此被稱爲字符串所指向的名稱new。名稱爲old的文件不再可以通過該名稱訪問。如果在調用rename函數之前存在由new指向的字符串指定的文件,則該行爲是實現定義的。

rename函數如果操作成功則返回零,如果失敗則返回非零,在這種情況下,如果文件先前存在,它仍然以其原始名稱知道。

究其原因的實施可能會導致重命名功能失效是文件被打開或有必要複製它的內容來實現其重命名。

我已經強調了在這最後一段片段,因爲這意味着任何數量的其他原因可能導致故障,比如試圖更改目錄,或試圖下午6點以後調用它的夜晚藍色的月亮:-)

如果子目錄位於同一個物理文件系統上,那麼至少應該認爲UNIX類操作系統沒有問題,因爲它很可能是一個簡單的inode移動。

但是,C標準似乎預設了關於底層文件系統的任何內容。