使用LINQ C#永久删除asp.net列表框中的项目

时间:2016-01-23 01:13:55

标签: c# asp.net linq listbox

我有一个ListBox,它包含并显示各个xml文件。归档文件正在累积,我需要实现删除按钮以永久删除所选的xml文件。enter image description here

文件存储在名为“Archive”文件夹的文件夹中(请参见屏幕截图) )enter image description here
我该如何实施解决方案?我的删除按钮后面有以下代码。代码正在通过删除内存中的记录来工作,但是每次页面加载文件时它都无法删除实际文件。我感谢您的帮助。感谢。

    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);

       }
   }

3 个答案:

答案 0 :(得分: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是列表中的exactfilename时,这才有效。

确保ListItem(item)也具有文件扩展名,否则你必须将其连接起来。

答案 1 :(得分: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

答案 2 :(得分: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