阅读两个多行文本框的每一行

3
有没有一种方法来读取两个多行文本框中的每一行?在textBox1中,我有一个包含使用以下代码压缩文件列表的多行字符串:
DirectoryInfo getExpandDLL = new DirectoryInfo(showExpandPath);
FileInfo[] expandDLL = getExpandDLL.GetFiles("*.dl_");
foreach (FileInfo listExpandDLL in expandDLL)
{
    textBox1.AppendText(listExpandDLL + Environment.NewLine);
}

目前我的代码的一部分如下:

textBox2.Text = textBox1.Text.Replace("dl_", "dll");
string cmdLine = textDir.Text + "\\" + textBox1.Text + " " + textDir.Text + "\\" + textBox2.Text;
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
startInfo.FileName = "expand.exe";
startInfo.UseShellExecute = true;
startInfo.Arguments = cmdLine.Replace(Environment.NewLine, string.Empty);
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

上面的代码获取textBox1中压缩文件的名称,将其重命名为textBox2,然后运行expand.exe以扩展压缩文件。该代码基本上给出了一个示例,即向expand.exe发出以下命令:

c:\users\nigel\desktop\file.dl_ c:\users\nigel\desktop\file.dll

如果文件夹中只包含 textBox1 中的一行文本,则它可以很好地工作。对于多行文本,命令基本上是:

c:\users\nigel\desktop\loadsoffiles.dl_ etc and doesnt work!

有没有一种方法可以读取textBox1的每一行,更改字符串并将其放入textBox2,然后将命令传递给expand.exe?
string cmdLine = textDir.Text + "\\" + lineOFtextBox1 + " " + textDir.Text + "\\" + lineOftextBox2;

编辑:为了明确起见:TextBox1 包含以下内容:

  • somefile.dl_
  • someMore.dl_
  • evenmore.dl_

这是多行文本。我的代码将该多行文本放入 textBox2,因此其包含以下内容:

  • somefile.dll
  • someMore.dll
  • evenmore.dll

有没有一种方法可以读取 textBox1 和 textBox2 的每一行 / 每一行的内容,并对其进行“处理”?

谢谢!


我不确定你的问题具体是什么,但如果只是基于换行符解析多行文本,那么你应该可以很好地使用Regex.Split来完成。 - Jaxidian
1
为什么你要将 DirectoryInfo.GetFiles 的所有输出放入文本框中,然后再尝试解析其中的字符串? - I4V
@I4V,这样textBox1就会显示一个列表,其中包括压缩文件的名称和它们的扩展名dl_。 - Nigel.Harris
1
l4V 的意思是你的文本框应该仅用于显示,不应解析它。你已经解析了数据,所以要保持它的安全,并在需要时使用它。 - banging
我明白你的意思了。但是expand.exe的工作方式是需要压缩文件的路径,即.dl_文件,然后是扩展文件的路径和名称,例如:c:\users\nigel\desktop\file.dl_ c:\users\nigel\desktop\file.dll。这就是为什么我尝试解析textBox1!但也许我应该解析Directory.GetFiles数据... 嗯,谢谢。 - Nigel.Harris
3个回答

11
您需要做的是循环遍历一个字符串数组,而不是处理单个字符串。请注意,TextBox具有“Lines”属性,可以将其分割成一个字符串数组。
foreach(string line in textBox1.Lines)
{
    //your code, but working with 'line' - one at a time

}

所以我认为你的完整解决方案应该是:

foreach (string line in textBox1.Lines)
{
    string cmdLine = textDir.Text + "\\" + line + " " + textDir.Text + "\\" + line.Replace("dl_", "dll");
    var process = new Process
        {
            StartInfo = new ProcessStartInfo
                {
                    FileName = "expand.exe",
                    Arguments = cmdLine.Replace(Environment.NewLine, string.Empty),
                    WindowStyle = ProcessWindowStyle.Normal,
                    UseShellExecute = true
                }
        };
    process.Start();
    process.WaitForExit();
}
请确认您的文本框中每一行都会启动一个进程,这是正确的行为。

谢谢,我已经尝试过了。问题在于我的代码目前的工作方式是重命名textBox1中的每一行。因此,第一行从somefile.dl_重命名为textBox2中的somefile.dll。有没有一种重命名“行”的方法?谢谢。 - Nigel.Harris
太棒了。非常感谢Rob。我能看到代码背后的逻辑。但是由于经验不足,我自己没有想到。再次感谢! - Nigel.Harris

1
第一个谷歌搜索结果告诉我们以下内容:
string txt = TextBox1.Text;
string[] lst = txt.Split(new Char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);

嗨,Grumble85,感谢您的回复。我认为Split不会有帮助,因为文本框1已经是一个多行文本,每行只有一行。 - Nigel.Harris
那是垃圾。请使用 Environment.NewLine - banging
@banging 是的,我一直在使用 Environment.NewLine。 - Nigel.Harris

1
你可以尝试使用这段代码。
string a = txtMulti.Text;

string[] delimiter = {Environment.NewLine};

string[] b = a.Split(delimiter, StringSplitOptions.None); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接