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