Windows上にサーバがありますが、実際にはLinuxサーバ上にあるネットワークドライブがあります。プログラムは、同じ名前(信号)の同じ場所にあるファイルを削除する必要がありますが、ローカルドライブ上にある場合は正常に動作しますが、ネットワークドライブ上で実行しているとファイルを削除しない場合があります。関数はすべてが正常になったことを返します(ファイルが削除されたことを意味します)。私はremove
、_unlink
、DeleteFileA
と試してみましたが、問題はまだ続きますが、いつでも完全にランダムに削除されず、このままになります。VS2015 Windows上のファイルからLinuxを削除する
コードは本当に簡単です:
bool File::Delete()
{
if(isFile() && exist())
{
return DeleteFileA(filename.c_str()) != 0 ? true : false;
}
else
return false;
}
これは必ずしもランダムに、例えばそれが権限を持っていないならば、それは失敗(と毎回失敗すると、ファイルが削除されていない場合でもtrueを返します)、誰かが私にアイデアを与えることができますか?私は選択肢を使い果たした:(
編集:@ExcessPhaseに おかげで、MOVEFILEが実際にエラーを検出するように、それはとても削除する前に名前を変更しても問題「ERROR_FILE_NOT_FOUND」を検出することができ、思わ
他のもの:これをランダムな問題は、ファイルがLinuxサーバから作成されたときにのみ発生します。ウィンドウからファイルを作成すると、それらは常に削除されます。さらに:プログラムが削除できないファイルがあり、 Windowsでは、これまでに削除できなかったものを検出して削除します。
Edit2:答えがいっぱい:linuxのファイル名test
とTEST
は異なっていますが、Windowsでは同じです。この問題は、ケースが一致しないときにランダムに表示されるようです。しかし、それは非常にランダムなので、私はよく分かりません。
は、コマンドラインまたはファイルエクスプローラツールを使用してリモートドライブから削除するために利用可能なファイルがある何かを試してみてください?あなたはファイルをチェックして、アクセス許可をドライブしていますか?チェックファイルの存在は失敗しても失敗しないために回避されます。 – oklas
誰かがファイルをオープンしている可能性があります - Sambaではなく、LINUXの直下にあります。私はちょうど作成された.dllファイルを移動するときに同じ問題を抱えています - SambaでMoveFileシステムコールは、私が覚えている限り(または許可が拒否された)ファイルを開いているということを知らせません。 –
DeleteFile()をMoveFile()とDeleteFile()に置き換えてみます。最初にファイルを新しい名前(単にファイル名にドットを付加したもの)に移動し、新しいファイル名を削除しようとします。 –