2016-04-17 5 views
-1

Cのコーディングでディレクトリから別のディレクトリにファイルを移動したいと考えています。cの名前を変更するコードにエラーがあります

私はrename()を検索して見つけます。それをdoesntの仕事を作業し、エラーを持っているときに、関数が、このエラーを示すこのコードを実行するとき

#include <stdio.h> 

int main() { 

if(rename("/root/tmpfile.php", "/home/check-tmp.php")) 

perror(NULL); 

} 

だけでなく、コンパイルされたコードが、::

私のコードは

Invalid cross-device link 

移動する方法システムを使用せずにディレクトリから別のディレクトリにファイルを開く?

また、私はそれを行う多くのコードと方法を見つけましたが、すべてのコードを作業していませんでした。

私に道を言うと、それは

おかげで動作することを確認してください。

+0

http://port70.net/~nsz/c/c11/n1570.html#note269 – Olaf

+0

どうすればいいですか? –

+1

rootユーザーはこのプログラムを実行していますか、または権限のないユーザーですか? – klog

答えて

0

`rename 'の動作の多くは、本質的にプラットフォームに依存します。ファイル名を変更すると、あるファイルシステムから別のファイルシステムにファイルを移動できない可能性があります。アトミックでない可能性があります。宛先抽象パス名のファイルがすでに存在します。言い換えれば

、お使いのシステムは、ファイルを別のパーティションを横断名前の変更はサポートされていません(rootパーティションやご自宅のパーティションが異なる。)

だから、解決策は、それが失敗した場合、先にファイルをコピーおよび削除ですオリジナル。

0

renameコールでは、1つのディスクパーティション内のファイルの名前を変更したり、ファイルを移動することしかできません。エラー "クロスデバイスリンク"は、あるパーティションから別のパーティションにファイルを移動しようとしたことを示します。 (Windowsシステム上にあった場合は、Cからのファイルの名前を変更しようとした場合、あなたが想像することができます:Dへ:.)

ファイルを移動するためのUnix mvコマンドを使用すると、それは最初renameをしようとしますが、もしこの方法では失敗し、元に戻って新しい場所にファイルの新しいコピーを作成し、元のファイルを削除します。これも、このような状況でコードを実行する必要があります。

(ファイルをコピーするあなたのためにそれを行う、とも最終更新時刻やその他のファイルの属性を保持するようなものの世話をすることは十分に簡単ですが、ライブラリ関数の多くはそこにあります。)

関連する問題