【问题标题】:Permanently delete items inside asp.net listbox using LINQ C#使用 LINQ C# 永久删除 asp.net 列表框中的项目
【发布时间】:2016-01-23 01:13:55
【问题描述】:

我有一个列表框,其中包含并显示单个 xml 文件。存档文件正在累积,我需要实现一个删除按钮来永久删除选定的 xml 文件。

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

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

       }
   }

【问题讨论】:

    标签: c# asp.net linq listbox


    【解决方案1】:

    您需要为文件操作添加 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(项目)也具有文件扩展名,否则您必须连接它。

    【讨论】:

    • 感谢 Aizen,列表框和“存档”文件夹中的选定文件现已删除。出于某种原因,当我加载页面时,删除的文件仍然发布在 ListBox 中,这很奇怪,因为它已经从存档文件夹中删除了文件。这是我的 Page_Load 代码,它调用了一个名为 loadXMLFiles() 的方法。您能否让我知道 loadXMLFiles 方法有什么问题。

      codeshare.io/aWnMF
    • 调用删除方法后。您应该释放 FileInfo[] 数组。这意味着参考和数据仍然存在,但文件已被删除。因此,在从实际文件中删除方法之后,您需要 inFiles = null;现在尝试从 foreach 迭代中捕获,因为您要使数组为空。
    • 从 outFiles 做同样的事情
    【解决方案2】:

    要实现这一点,您需要两个因素。对代码的修改,如下所示:

        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

    【讨论】:

      【解决方案3】:

      您可以通过使用单个循环来执行此操作,如下所示:

      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
      

      【讨论】:

        猜你喜欢
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多