2017-08-03 37 views
-1

我正在製作一個個人使用的應用程序,它將組織.png文件,並讓我通過應用程序(通過ListView)從目錄中遠程刪除它們。通過ListView刪除.png文件

我有一個代碼片段將從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()); 
      } 
    } 

以獲取更多信息的其他片段..

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()); 不起作用。請幫忙!

+1

我guesing,與其'File.Delete(fbd.SelectedPath + fileDisplayListView.Items.ToString());'你應該有'File.Delete(Path.Combine(fbd.SelectedPath,項目。 Text));' – Kedrzu

+0

使用調試器可以創造奇蹟。你是否捕獲選定的文件,它是FilePath ..? – MethodMan

+0

@Kedrzu我試過這個,它不起作用。 MethodMan我已經將MessageBox()檢查器放在最終的字符串之間,文件路徑似乎是準確的。這似乎是一個非常簡單的解決方案,但它不斷輸出'FILE_DIRECTORYSystem.Windows.Forms.ListView + ListViewItemCollection' –

回答

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--; 
      } 
     } 
    } 
} 
+0

我想出了一個類似的解決方案,但這是功能性的,所以我會標記它。謝謝您的幫助。 –

+0

你真的不應該自動從ListView中刪除該行。有很多*可能會阻止'Delete()'調用實際工作。刪除後最好用文件夾的內容刷新控件。 – Grammarian

0

這是我用來修復應用程序的片段。這與我如何解決問題有很多直接的關係。

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