Cで開発されたアプリケーションがあります。このアプリケーションは複数のプラットフォームでサポートされています。ファイル転送プロトコルを介して別のマシンまたはローカルマシン上の他のディレクトリにファイルを転送する機能が1つあります。一時的な名前でファイルを転送できる機能を含めたいのですが、転送が完了したら、ファイルの名前を正しい名前(実際のファイル名)に変更したいと思います。
単純なrename()関数を使ってみました。UnixおよびLinuxマシンで正常に動作します。ただし、Windowsでは機能しません。13(許可拒否エラー)のエラーコードが表示されます。
まず、msdnをチェックインして、ファイルなどにいくつかのアクセス許可を付与する必要がある場合の名前変更の機能を確認しました。
- ファイルに完全なアクセス許可を付与しました(777としましょう)。
- 他のいくつかの投稿で、ファイルの名前を変更する前にファイル記述子を閉じる必要があることを読みました。私もそうしました。それでも同じエラーが発生します。
- ファイルの所有者とアプリケーションの所有者について言及されている他の投稿はほとんどありません。アプリケーションはSYSTEMユーザーとして実行されます。(ただし、アプリケーションで次のように同じ名前変更関数を試したため、これは動作に影響を与えないはずです。
これは私のアプリケーションからはうまく機能します:
rename("C:/abc/aaa.txt","C:/abc/zzz.txt");
しかし
rename(My_path,"C:/abc/zzz.txt");
My_path
印刷時に表示される場合は機能しませんC:/abc/test.txt
。
ファイルの名前を変更するにはどうすればよいですか?複数のプラットフォームで動作するために必要です。それを機能させるために私が試みるべき他のことはありますか?