【问题标题】:Deleting .png File through ListView通过 ListView 删除 .png 文件
【发布时间】:2018-01-11 13:50:21
【问题描述】:

我正在制作一个供个人使用的应用程序,它将组织 .png 文件,并允许我通过应用程序(通过 ListView)从目录中远程删除它们。

我有一个 sn-p 会从 ListView 中删除文件,但不会从实际文件目录中删除。当我单击删除时,我希望能够同时执行这两项操作。

private void deleteToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("This will delete the file from the folder. Are you sure?", "Warning", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == DialogResult.Yes)
            for (int i = fileDisplayListView.SelectedItems.Count - 1; i >= 0; i--)
            {
                ListViewItem item = fileDisplayListView.SelectedItems[i];
                fileDisplayListView.Items[item.Index].Remove();
                File.Delete(fbd.SelectedPath + fileDisplayListView.Items.ToString());
            }
    }

附加 sn-p 了解更多信息..

private void openToolStripButton_Click(object sender, EventArgs e)
    {           
        fbd.ShowDialog();
        DirectoryInfo di = new DirectoryInfo(fbd.SelectedPath);
        directoryPath.Text = "Directory: " + fbd.SelectedPath;
        FileInfo[] Files =
            di.GetFiles("*.PNG*", SearchOption.AllDirectories);
        if (Files.Length == 0)
            MessageBox.Show("No .png files found in directory...", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Question);
        fileDisplayListView.Items.Clear();
        foreach (FileInfo f in Files)
        {
            ListViewItem item = new ListViewItem(f.Name);             
           this.fileDisplayListView.Items.Add(f.Name);            
        }
        this.fileDisplayListView.View = View.Details;
        this.fileDisplayListView.Refresh();
    }

它的最后一部分,File.Delete(fbd.SelectedPath + fileDisplayListView.Items.ToString()); 不起作用。请帮忙!

【问题讨论】:

  • 我猜你应该有File.Delete(fbd.SelectedPath + fileDisplayListView.Items.ToString());而不是File.Delete(Path.Combine(fbd.SelectedPath, item.Text));
  • 使用调试器可以创造奇迹。您是否正在捕获选定的文件,它是 FilePath..?
  • @Kedrzu 我已经尝试过了,但它不起作用。 MethodMan 我在最终字符串之间放置了 MessageBox() 检查器,并且文件路径似乎准确。这似乎是一个非常简单的解决方案,但它一直在输出FILE_DIRECTORYSystem.Windows.Forms.ListView+ListViewItemCollection

标签: c# .net winforms visual-studio listview


【解决方案1】:

此代码获取目录中所有 .jpg 文件的列表,并将它们添加到 ListView。通过按下按钮,它会删除选定的 ListView 元素和文件:

private FileInfo[] files;
public Form1()
{
    InitializeComponent();

    files = new DirectoryInfo(@"C:\Users\User\Pictures").GetFiles("*.jpg", SearchOption.AllDirectories);
    foreach (var file in files)
    {
        listView1.Items.Add(file.Name);
    }
}

private void button1_Click(object sender, EventArgs e)
{
    for (int i = 0; i < listView1.SelectedItems.Count; i++)
    {
        var curentItem = listView1.SelectedItems[i];
        foreach (FileInfo file in files)
        {
            if (curentItem.Text == file.Name)
            {
                listView1.Items.Remove(curentItem);
                file.Delete();
                i--;
            }
        }
    }
}

【讨论】:

  • 我想出了一个类似的解决方案,但这是功能性的,所以我会标记它。感谢您的帮助。
  • 您真的不应该从 ListView 中自动删除该行。有许多 项可能会阻止Delete() 调用实际工作。删除后最好用文件夹的内容刷新控件。
【解决方案2】:

这是我用来修复应用程序的 sn-p。这与我解决问题的方式直接相关。

if (MessageBox.Show("This will delete the file from the folder. Are you sure?", "Warning", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == DialogResult.Yes)
            for (int i = fileDisplayListView.SelectedItems.Count - 1; i >= 0; i--)
            {
                ListViewItem item = fileDisplayListView.SelectedItems[i];
                string fpath = string.Empty;
                fileDisplayListView.Items[item.Index].Remove();
                fpath = fbd.SelectedPath.ToString() + "\\" + item.Text;
                File.Delete(fpath);
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2015-02-03
    • 2015-06-19
    相关资源
    最近更新 更多