簡體   English   中英

VS2015從Windows程序中刪除Linux上的文件

[英]VS2015 removing a file on linux from windows program

我們在Windows上有一個服務器,但實際上有一個Linux服務器上有一個網絡驅動器。 本程序必須刪除具有相同名稱(信號)的相同位置的文件,當這些文件位於本地驅動器上時可以正常工作,但是在網絡驅動器上運行時,有時將無法刪除該文件,甚至更糟,函數將返回一切正常(表示文件已刪除)。 我嘗試使用remove_unlinkDeleteFileA ,問題仍然存在,有時完全是隨機的,它不會被刪除,並且會一直保持這種狀態。

代碼非常簡單:

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創建它們,它們將始終被刪除。 甚至更多:如果我有一個程序無法刪除的文件,並且在Windows旁邊創建了另一個文件,該程序將檢測並刪除以前無法刪除的文件。

Edit2:答案更明確: Linux中的文件名testTEST不同,而Windows中則相同。 當大小寫不匹配時,問題似乎隨機出現。 但是我不確定,因為它是如此隨機。

我相信問題出在Linux上的Samba服務上,該服務為Windows實現了SMB協議。 DeleteFile函數僅請求SMB服務器(Windows上的服務器服務)刪除文件。 成功由Samba返回。

也許您應該嘗試更高級別的操作,例如boost文件系統或std :: experimental :: filesystem :: remove

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM