C# 接受进程中的多行字符串。开始

C# 接受进程中的多行字符串。开始,c#,string,process,C#,String,Process,我正在解析目录位置的路径: 假设InitialPath=@“C:\Users\username\Documents\Visual Studio 2015\Projects” 我有一个循环: var list = new List<string>(); foreach(var folder in Directory.GetDirectories(InitialPath) { var folder = Path.GetFileName(folder); var file

我正在解析目录位置的路径:

假设
InitialPath=@“C:\Users\username\Documents\Visual Studio 2015\Projects”

我有一个循环:

var list = new List<string>();

foreach(var folder in Directory.GetDirectories(InitialPath) {
    var folder = Path.GetFileName(folder);
    var file = Path.GetFileName(Directory.GetFiles(folder, "*.sln").Single());

    list.Add(InitialPath +  "\\" + folder + "\\" + file); //would then result something like "C:\Users\username\Documents\Visual Studio 2015\Projects\Folder1\Project1inFolder1.sln"
}

这只是你的MessageBox包装文本的方式。这里有两个选项:

  • 创建自定义表单类
  • 创建一个仅用于显示消息的表单对话框
编辑:

更改此项:

 Process.Start(@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe", Solution);

这里发生的是
进程的第二个参数。Start
方法被视为第一个参数给出的可执行文件的参数。因此,process.start的作用相当于(但不完全相同)打开命令提示符并键入:

 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" X:\_\Document\Visual Studio 2015\.....

命令提示符将(空格)视为参数分隔符,因此它将
X:\\Document\Visual
视为一个参数,
Studio
视为下一个参数,依此类推。当你用
“\”
来处理你要告诉的字符串时。首先,整个过程(包括空格)都是一个参数。

你的示例中有一些错误,对我来说,这很有效,我得到了所有的*.sln文件

//this is just to show that you can get short file name if you need FileInfo
        var list = new Dictionary<string, string>();

        var files = Directory.GetFiles(InitialPath, "*.sln", SearchOption.AllDirectories);
        foreach (var file in files)
        {
            FileInfo fileInfo = new FileInfo(file);
            list.Add(fileInfo.Name, file);
        }

        Process.Start(list.FirstOrDefault().Value);

您需要arguments devenv/中的命令,并且必须将路径用双引号(“fullFilePath”)括起来。

显示两行的不只是它的显示方式吗?字符串本身应该仍然是一行,对吗?是的,但我看到的是
进程的方式。Start()
解析字符串,它会被分成几行。请参阅最后一个图像参考。在
process.Start()上放置一个断点,然后查看它接受的输入内容。它显示一行文本,但当
process.Start()
被执行,它被分成几行。问题不是关于显示多行文本的messagebox。我的问题是
如何处理.Start()
接受这多行字符串?我想你需要在
解决方案
周围转义双引号。我猜解决方案路径是“@”的单个参数C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe“。如果参数中有空格,则会将其视为单独的参数。我对第一个参数没有问题,是的,我已转义到devenv.exe的路径。现在的问题是第二个参数,即使用参数1打开文件的路径。
Solution
是第二个参数,不是吗。我编辑了我的答案以反映我刚才所说的。哇,它成功了。你能解释一下它是怎么通过的吗?。那个
“\”
是什么,它的用途和工作原理?谢谢
 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" X:\_\Document\Visual Studio 2015\.....
//this is just to show that you can get short file name if you need FileInfo
        var list = new Dictionary<string, string>();

        var files = Directory.GetFiles(InitialPath, "*.sln", SearchOption.AllDirectories);
        foreach (var file in files)
        {
            FileInfo fileInfo = new FileInfo(file);
            list.Add(fileInfo.Name, file);
        }

        Process.Start(list.FirstOrDefault().Value);
 Process.Start(@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe", @"devenv/""" + fullFilePath + @"""");