Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VS2015从windows程序中删除linux上的文件_C++_Visual C++_Visual C++ 2015 - Fatal编程技术网

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

C++ VS2015从windows程序中删除linux上的文件,c++,visual-c++,visual-c++-2015,C++,Visual C++,Visual C++ 2015,我们在windows上有一个服务器,但它有一个网络驱动器,实际上是在linux服务器上。程序必须删除位于同一位置、具有相同名称(信号)的文件,当这些文件位于本地驱动器上时,程序工作正常,但在网络驱动器上运行时,程序有时不会删除该文件,更糟糕的是,函数将返回一切正常(意味着文件已被删除)。我尝试了删除,取消链接,删除文件A,但问题仍然存在,有时完全随机,它不会被删除,并且会保持这样 代码非常简单: bool File::Delete() { if(isFile() && ex

我们在windows上有一个服务器,但它有一个网络驱动器,实际上是在linux服务器上。程序必须删除位于同一位置、具有相同名称(信号)的文件,当这些文件位于本地驱动器上时,程序工作正常,但在网络驱动器上运行时,程序有时不会删除该文件,更糟糕的是,函数将返回一切正常(意味着文件已被删除)。我尝试了
删除
取消链接
删除文件A
,但问题仍然存在,有时完全随机,它不会被删除,并且会保持这样

代码非常简单:

bool File::Delete()
{
   if(isFile() && exist())
   {
        return DeleteFileA(filename.c_str()) != 0 ? true : false;
   }
   else 
       return false;
}
即使文件没有被删除,它也总是返回true,例如,如果它没有权限,它应该失败(并且每次都失败,不是随机的),有人能给我一个主意吗?我别无选择:(

编辑: 多亏了@ExcessPhase,moveFile似乎实际上检测到了错误,所以在删除之前重命名可以检测到“错误\未找到文件\未找到”的问题

其他事项:此随机问题只能在从linux服务器创建文件时发生。如果我从windows创建文件,它们将始终被删除。更重要的是:如果我有一个程序无法删除的文件,并且我从windows在其旁边创建了另一个文件,程序将检测并删除以前无法删除的文件


Edit2:更接近答案:linux中的文件名
test
test
是不同的,而Windows中是相同的。当大小写不匹配时,问题似乎是随机出现的。但我不确定,因为它太随机了。

我相信问题在于linux上的Samba服务,它实现了r Windows。
DeleteFile
函数只请求SMB服务器(Windows上的服务器服务)删除文件。成功由Samba返回。

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

也许您应该尝试更高级别的操作,如boost文件系统,或者

也许您应该尝试更高级别的操作,如boost文件系统,或者

是否可以从命令行或使用文件资源管理器工具从远程驱动器中删除文件?是否检查文件和drive访问权限?检查文件存在性是无错误的解决方法失败的结果。可能是有人打开了该文件——不需要通过Samba,而是直接在LINUX下打开。我在移动刚创建的.dll文件时遇到了同样的问题——使用Samba时,MoveFile系统调用失败,告诉我其他人以f的形式打开了该文件ar正如我所记得的(或权限被拒绝)。尝试用MoveFile()和DeleteFile()替换DeleteFile()。首先将文件移动到一个新名称(只是在文件名后面加一个点),然后尝试删除新文件名。@ExcessPhase您对MoveFile的提示似乎有效,至少程序现在抛出了一个错误:)它返回错误代码2,似乎是“错误文件未找到”错误,这很奇怪,因为文件在那里,删除操作没有返回错误。是否有文件可从远程驱动器通过命令行或使用文件资源管理器工具删除?是否检查文件和驱动器访问权限?是否检查文件存在是解决无错误的方法,结果是失败。可能是有人打开了文件n—通过Samba不需要,但直接在LINUX下。移动刚创建的.dll文件时,我遇到了相同的问题—使用Samba时,MoveFile系统调用失败,告诉我在我记忆中有其他人打开了该文件(或权限被拒绝)。请尝试用MoveFile()和DeleteFile()替换DeleteFile()。首先将该文件移动到一个新名称(只需在文件名后加上一个点),然后尝试删除新文件名。@ExcessPhase您对moveFile的提示似乎有效,至少程序现在抛出了一个错误:)它返回错误代码2,看起来像“error\u file\u NOT\u FOUND”错误,这很奇怪,因为文件在那里,删除不会返回错误。似乎是这样,因为移动文件会检测到错误。编辑了我的问题。似乎是这样,因为移动文件会检测到错误。编辑了我的问题。