0

我们在 Windows 上有一个服务器,但它有一个网络驱动器,它实际上是在一个 linux 服务器上。该程序必须删除同一位置的同名文件(信号),当这些文件在本地驱动器上时它可以正常工作,但是当在网络驱动器上运行时,它有时不会删除该文件,更糟糕的是,这些函数将返回一切正常(意味着文件被删除)。remove我用, _unlink,试过了,DeleteFileA问题仍然存在,有时完全随机它不会被删除,它会保持这样的状态。

代码非常简单:

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:更接近答案:文件名testTEST在 linux 中是不同的,而在 Windows 中是相同的。当大小写不匹配时,问题似乎随机出现。但我不确定,因为它是如此随机。

4

2 回答 2

2

我相信问题在于 Linux 上的 Samba 服务,它为 Windows 实现了 SMB 协议。DeleteFile函数只是请求 SMB 服务器(Windows 上的服务器服务)删除文件。Samba 返回成功。

于 2016-04-05T16:32:03.117 回答
0

也许您应该尝试更高级别的东西,例如 boost 文件系统或std::experimental::filesystem::remove

于 2016-04-06T09:31:11.240 回答