我们在windows上有一个服务器,但是它有一个网络驱动器,实际上是在linux服务器上。该程序必须删除同名(信号)相同位置的文件,当这些文件位于本地驱动器上时,它工作正常,但在网络驱动器上运行时,它有时不会删除该文件,更糟糕的是,函数将返回一切正常(意味着文件被删除)。我试过用remove,_unlink,DeleteFileA,这个问题仍然存在,有时完全是随机的,它不会被删除,它会保持这样。
代码非常简单:
bool File::Delete()
{
if(isFile() && exist())
{
return DeleteFileA(filename.c_str()) != 0 ? true : false;
}
else
return false;
}这将始终返回true,即使该文件未被删除,如果它没有权限,它应该失败(并且每次失败,而不是随机),有人能给我一个想法吗?我没有别的选择了
编辑:由于@阶段,似乎moveFile实际上检测到了一个错误,因此在删除之前重命名可以检测到"ERROR_FILE_NOT_FOUND“问题。
其他事情:这个随机问题只有在从linux服务器创建文件时才会发生。如果我从窗口创建它们,它们将永远被删除。更多的是:如果我有一个程序无法删除的文件,并且在Windows旁边创建另一个文件,程序将检测并删除以前无法删除的文件。
Edit2:更接近于回答: linux中的文件名test和TEST是不同的,而在中是一样的。当情况不匹配时,这个问题似乎是随机出现的。但我不确定因为它太随意了。
发布于 2016-04-05 16:32:03
我认为问题在于Linux上的Samba服务,它为Windows实现了SMB协议。DeleteFile函数只是请求SMB服务器(服务器服务)删除一个文件。成功是由Samba返回的。
发布于 2016-04-06 09:31:11
也许您应该尝试更高的级别,比如boost文件系统,或者std::实验性::文件系统::删除。
https://stackoverflow.com/questions/36429845
复制相似问题