2016-01-23 72 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