我们在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旁边创建了另一个文件,程序将检测并删除之前无法删除的文件。
编辑2:更接近回答:linux中的文件名test
和TEST
是不同的,而在Windows中它是相同的。当案例不匹配时,问题似乎随机出现。但我不确定,因为它是随机的。
答案 0 :(得分:2)
我认为问题出在Linux上的Samba服务,它实现了Windows的SMB协议。 DeleteFile
函数只是请求SMB服务器(Windows上的服务器服务)删除文件。 Samba返回了成功。
答案 1 :(得分:0)
也许您应该尝试更高级别的内容,例如提升文件系统或std::experimental::filesystem::remove