VS2015从windows程序中删除linux上的文件

时间:2016-04-05 14:51:46

标签: c++ visual-c++ visual-c++-2015

我们在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旁边创建了另一个文件,程序将检测并删除之前无法删除的文件。

编辑2:更接近回答:linux中的文件名testTEST是不同的,而在Windows中它是相同的。当案例不匹配时,问题似乎随机出现。但我不确定,因为它是随机的。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

也许您应该尝试更高级别的内容,例如提升文件系统或std::experimental::filesystem::remove