如何从此输出中写入文本文件

我有以下代码,以便我可以搜索目录来查找文件。 现在我想为用户添加一种将输出保存到文本文件的方法?

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; namespace RecursiveSearchCS { public class Form1 : System.Windows.Forms.Form { internal System.Windows.Forms.Button btnSearch; internal System.Windows.Forms.TextBox txtFile; internal System.Windows.Forms.Label lblFile; internal System.Windows.Forms.Label lblDirectory; internal System.Windows.Forms.ListBox lstFilesFound; internal System.Windows.Forms.ComboBox cboDirectory; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } private void InitializeComponent() { this.btnSearch = new System.Windows.Forms.Button(); this.txtFile = new System.Windows.Forms.TextBox(); this.lblFile = new System.Windows.Forms.Label(); this.lblDirectory = new System.Windows.Forms.Label(); this.lstFilesFound = new System.Windows.Forms.ListBox(); this.cboDirectory = new System.Windows.Forms.ComboBox(); this.SuspendLayout(); // // btnSearch // this.btnSearch.Location = new System.Drawing.Point(608, 248); this.btnSearch.Name = "btnSearch"; this.btnSearch.Size = new System.Drawing.Size(75, 23); this.btnSearch.TabIndex = 0; this.btnSearch.Text = "Search"; this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); // // txtFile // this.txtFile.Location = new System.Drawing.Point(8, 40); this.txtFile.Name = "txtFile"; this.txtFile.Size = new System.Drawing.Size(120, 20); this.txtFile.TabIndex = 4; this.txtFile.Text = "*.*"; // // lblFile // this.lblFile.Location = new System.Drawing.Point(8, 16); this.lblFile.Name = "lblFile"; this.lblFile.Size = new System.Drawing.Size(144, 16); this.lblFile.TabIndex = 5; this.lblFile.Text = "Search for files containing:"; // // lblDirectory // this.lblDirectory.Location = new System.Drawing.Point(8, 96); this.lblDirectory.Name = "lblDirectory"; this.lblDirectory.Size = new System.Drawing.Size(120, 23); this.lblDirectory.TabIndex = 3; this.lblDirectory.Text = "Look In:"; // // lstFilesFound // this.lstFilesFound.Location = new System.Drawing.Point(152, 8); this.lstFilesFound.Name = "lstFilesFound"; this.lstFilesFound.Size = new System.Drawing.Size(528, 225); this.lstFilesFound.TabIndex = 1; // // cboDirectory // this.cboDirectory.DropDownWidth = 112; this.cboDirectory.Location = new System.Drawing.Point(8, 128); this.cboDirectory.Name = "cboDirectory"; this.cboDirectory.Size = new System.Drawing.Size(120, 21); this.cboDirectory.TabIndex = 2; this.cboDirectory.Text = "ComboBox1"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(688, 277); this.Controls.Add(this.btnSearch); this.Controls.Add(this.txtFile); this.Controls.Add(this.lblFile); this.Controls.Add(this.lblDirectory); this.Controls.Add(this.lstFilesFound); this.Controls.Add(this.cboDirectory); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); this.PerformLayout(); } #endregion ///  /// The main entry point for the application ///  [STAThread] static void Main() { Application.Run(new Form1()); } private void btnSearch_Click(object sender, System.EventArgs e) { lstFilesFound.Items.Clear(); txtFile.Enabled = false; cboDirectory.Enabled = false; btnSearch.Text = "Searching..."; this.Cursor = Cursors.WaitCursor; Application.DoEvents(); DirSearch(cboDirectory.Text); btnSearch.Text = "Search"; this.Cursor = Cursors.Default; txtFile.Enabled = true; cboDirectory.Enabled = true; } private void Form1_Load(object sender, System.EventArgs e) { cboDirectory.Items.Clear(); foreach (string s in Directory.GetLogicalDrives()) { cboDirectory.Items.Add(s); } cboDirectory.Text = "C:\\"; } void DirSearch(string sDir) { try { foreach (string d in Directory.GetDirectories(sDir)) { foreach (string f in Directory.GetFiles(d, txtFile.Text)) { lstFilesFound.Items.Add(f); } DirSearch(d); } } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } } } } 

这里还是Application Open的截图:

打开应用程序图像

我将添加一个保存按钮,在单击时保存到特定位置,我将如何执行此操作。

如果我正确理解它,请使用简单的I / O操作。

  using(StreamWriter writer = new StreamWriter("debug.txt", true)) { foreach (string item in lstFilesFound.Items) { writer.WriteLine(item.ToString()); } } 

几个额外的指针:

在DirSearch中,为Directory.GetDirectories(sDir)创建一个变量。 你现在的代码导致这个东西在每个循环中计算。 在其他领域寻找更类似的重构代码。

 var dirs = Directory.GetDirectories(sDir); foreach (string d in dirs) { var files = Directory.GetFiles(d, txtFile.Text); foreach (string f in files) { lstFilesFound.Items.Add(f); } DirSearch(d); } 

希望能帮助到你。

我假设它是您要保存到文本文件的已找到文件的列表,在您的保存事件上如何(粗略代码,因此未经过广泛测试)?

 using (FileStream fs = new FileStream("c:\\files.txt", FileMode.Create, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { foreach (string item in lstFilesFound.Items) { sw.WriteLine(item); } } }