2016-01-23 64 views
0

我有一個包含並顯示單個xml文件的列表框。歸檔文件正在積累,我需要實施一個刪除按鈕來永久刪除所選的xml文件。 enter image description here

這些文件存儲在名爲「Archive」文件夾的文件夾中(請參見截圖)enter image description here
我該如何實施解決方案?我有下面的代碼爲我的刪除按鈕。代碼正在刪除內存中的記錄,但它無法刪除實際的文件,每次頁面加載時文件仍然存在。我感謝您的幫助。謝謝。使用LINQ永久刪除asp.net列表框中的項目C#

protected void DeleteValues(object sender, EventArgs e) 
    { 
     List<ListItem> deletedItems = new List<ListItem>(); 
     foreach (ListItem item in ListBoxArchive.Items) 
     { 
      if (item.Selected) 
      { 
       deletedItems.Add(item); 
      } 
     } 

     foreach (ListItem item in deletedItems) 
     { 
      ListBoxArchive.Items.Remove(item); 

     } 
    } 

回答

0

您需要爲File Manipulation添加System.IO。將此方法添加到您的課程

using System.IO 

string FolderLocation = @"c:\MyFolder"; 
public void DeleteItemFile(string FileName){ 
    string fileLPath = Path.Combine(FolderLocation,FileName); 
    File.Delete(filePath); 


} 

現在修改您的foreach循環添加這一行。

foreach (ListItem item in deletedItems) 
    { 
     ListBoxArchive.Items.Remove(item); 
     DeleteItemFile(item.ToString()); 

    } 

這隻有在您擁有的ListItem是列表中的確切文件名時纔有效。

確保ListItem(item)也具有文件擴展名,否則您必須對其進行簡化。

+0

謝謝藍染,列表框和「存檔」文件夾中選定的文件現在被刪除。出於某種原因,當我加載頁面時,刪除的文件仍然在ListBox內張貼,很奇怪,因爲它已經從Archive文件夾中刪除了這些文件。這是我的Page_Load代碼,它調用一個名爲loadXMLFiles()的方法。你可以讓我知道loadXMLFiles方法有什麼問題。

https://codeshare.io/aWnMF –

+0

在調用刪除方法後。你應該釋放FileInfo []數組。這意味着參考和數據仍然存在,但文件已被刪除。所以在從實際文件中刪除方法後,你需要inFiles = null;現在嘗試一下,並從foreach中讀取,因爲您要將數組歸零。 – Aizen

+0

從outFiles中做同樣的事情 – Aizen

0

有兩個因素需要您完成。修改你的代碼,就像這樣:

protected void DeleteValues(object sender, EventArgs e) 
    { 
     List<ListItem> deletedItems = new List<ListItem>(); 
     foreach (ListItem item in lbItems.Items) 
     { 
      if (item.Selected) 
      { 
       deletedItems.Add(item); 
      } 
     } 
     String ArchiveFolderPath = Server.MapPath("/Archive/"); 
     foreach (ListItem item in deletedItems) 
     { 
      lbItems.Items.Remove(item); 
      System.IO.File.Delete(ArchiveFolderPath + item.Text);//assumes item.Text is a valid file name 

     } 
    } 

你需要做的下一件事就是給Windows帳戶寫權限到Web服務器上的文件夾。

雖然這會回答你的編程問題,但我想建議你通過一些可能運行powershell腳本的計劃任務來處理文件內務。

Delete files older than 15 days using PowerShell

0

您可以通過使用一個循環如下做到這一點:

string BaseFolder = @"folderLocation here"; 
foreach (ListItem item in ListBoxArchive.Items) 
    { 
     if (item.Selected) 
     { 
      string fileLPath = Path.Combine(BaseFolder,item.ToString()); 
      File.Delete(filePath); 
     } 
    } 
    //Rebind the List here