2011-03-19 83 views
0

我希望从网络PC中删除文件。用户可以完全控制要从中删除文件的PC上的共享文件夹。 我有这样的代码:VC++ CLI/CLR通过网络删除文件/文件夹

if(status) 
     { 
      if(File::Exists(selectedfile)) 
       System::IO::File::Delete(selectedfile); 
      else 
       MessageBox::Show("File does not exist."); 

     } 
     else 
     { 
      if(!System::IO::Directory::Exists(selectedfile)) 
       MessageBox::Show("The directory does not exists."); 
      try{ 
       System::IO::Directory::Delete(selectedfile,true); 
       if(System::IO::Directory::Exists(selectedfile)) 
       { 
        deleted =false; 
        System::IO::Directory::Delete(selectedfile,true); 
       } 
       else 
        deleted = true; 
      } 

我列入目录循环第二删除,因为文件夹是不是在第一次尝试删除,只有文件夹中的文件被删除。但是,每当我尝试删除空文件夹时,我都会拒绝Access。

如何确保目录及其所有内容都被删除。

回答

0

您需要在电脑A和B文件服务器功能和计算机C.编写客户端

  • 服务器可能是一种FTP服务器,在那里你必须明确地配置哪些目录的处理上这两个网站。

  • 服务器可以是Windows共享。您可以使用UNC文件名来解决这些文件并在计算机C上使用Windows API。当您在计算机C上映射网络驱动器时,您可以像使用本地文件一样处理网络文件。
    必须配置计算机A和B,以便有足够权限的共享。

1

这是非常正常的,多任务操作系统需要做的事情之一。该目录实际上标记为删除,但目前还不能删除,因为一个或多个进程在该目录上打开了一个句柄。在Windows的情况下,这通常是一个使用该目录作为其默认工作目录的进程。或者也许你已经打开了一个浏览器窗口,看看你的程序如何完成它的工作。 Explorer使用ReadDirectoryChangesW()获取有关目录中更改的通知,以便知道何时刷新视图。

一旦最后一个手柄关闭,目录将从驱动器中物理移除。虽然它存在于zombified状态,但任何对目录执行任何操作的尝试都会产生访问错误(Windows错误代码5)。

您需要在程序中对此行为进行说明。绝对要删除第二个Directory :: Exists()测试,当你没有从Delete调用中得到异常时,你需要假定该目录被删除。最终这将是准确的。