gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:09:03 24 4
gpt4 key购买 nike

我们在 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 中是相同的。当大小写不匹配时,问题似乎是随机出现的。但我不确定,因为它太随机了。

最佳答案

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

关于c++ - VS2015从windows程序中删除linux上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36429845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com