如何从这个输出写入一个文本文件 [英] How to write a Text file from this Output
问题描述
using System;
使用System.Drawing;
使用System.Collections;
使用System.ComponentModel;
使用System.Windows.Forms;
使用System.Data;
使用System.IO;
namespace RecursiveSearchCS
{
public class Form1:System.Windows.Forms.Form
{
internal System.Windows.Forms.Button btnSearch;
内部System.Windows.Forms.TextBox txtFile;
内部System.Windows.Forms.Label lblFile;
内部System.Windows.Forms.Label lblDirectory;
内部System.Windows.Forms.ListBox lstFilesFound;
内部System.Windows.Forms.ComboBox cboDirectory;
private System.ComponentModel.Container components = null;
$ b $ public Form1()
{
InitializeComponent();
$ b protected override Dispose(bool处置)
{
if(处置)
{
if != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
$ b 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 =搜索;
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 =搜索包含的文件:;
//
// 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
///< summary>
///应用程序的主要入口
///< / summary>
[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 =正在搜索...;
this.Cursor = Cursors.WaitCursor;
Application.DoEvents();
DirSearch(cboDirectory.Text);
btnSearch.Text =搜索;
this.Cursor = Cursors.Default;
txtFile.Enabled = true;
cboDirectory.Enabled = true;
$ b $ private void Form1_Load(object sender,System.EventArgs e)
{
cboDirectory.Items.Clear();
foreach(Directory.GetLogicalDrives()中的字符串s)
{
cboDirectory.Items.Add(s);
}
cboDirectory.Text =C:\\;
无效DirSearch(字符串sDir)
{
尝试
{
foreach(Directory.GetDirectories(sDir)中的字符串d)
{
foreach(在Directory.GetFiles(d,txtFile.Text)中的字符串f)
{
lstFilesFound.Items.Add(f);
}
DirSearch(d);
$ b $ catch(System.Exception excpt)
{
Console.WriteLine(excpt.Message);
$ b code
$ b也是应用程序公开的截图:
我要添加一个保存按钮,点击后保存到特定位置,我将如何去做这件事。
解决方案如果我正确地理解了,请使用简单的I / O操作。使用(StreamWriter writer = new StreamWriter(debug.txt,true))
{
foreach(lstFilesFound.Items中的字符串项)
{
writer.WriteLine(item.ToString());
$ b $几乎没有额外的指针:
在DirSearch中,为 Directory.GetDirectories(sDir)
创建一个变量。你现在的代码导致这个东西在每个循环中计算。在其他方面寻找一些更类似的重构代码。
var dirs = Directory.GetDirectories(sDir);
foreach(字符串d在dirs中)
{
var files = Directory.GetFiles(d,txtFile.Text);
foreach(文件中的字符串f)
{
lstFilesFound.Items.Add(f);
}
DirSearch(d);
}
希望有帮助。
I have the following code so that I can search directories to find files. Now I want to add a way for users to Save the output to a text file?
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
/// <summary>
/// The main entry point for the application
/// </summary>
[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);
}
}
}
}
Here is also a screenshot of the Application Open:
I am going to add a save button which saves to a specific location when clicked, how would I go about doing this.
解决方案 If I am understanding it correctly, use a simple I/O operation.
using(StreamWriter writer = new StreamWriter("debug.txt", true))
{
foreach (string item in lstFilesFound.Items)
{
writer.WriteLine(item.ToString());
}
}
Few extra pointers:
In DirSearch, create a variable for Directory.GetDirectories(sDir)
. Your present code is causing this thing to calculate in every loop. Look for some more similar refactoring code in other areas.
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);
}
Hope it helps.
这篇关于如何从这个输出写入一个文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!