2011-03-19 70 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調用中得到異常時,你需要假定該目錄被刪除。最終這將是準確的。