windows 进程.Start(FilePath)中使用逗号分隔

ruarlubt  于 2022-11-18  发布在  Windows
关注(0)|答案(3)|浏览(134)

当在目录中搜索由_fileToSearch参数驱动的特定名称的文件时,我创建了一个DrawingFound的自定义列表,并将文件路径存储在名为FileDirectory的字符串中。
然后我需要在一个按钮上单击OpenDrawing(),以使存储在FileDirectory中的文件向用户打开。这在大多数情况下都有效,但是,例如,如果路径有,,则资源管理器默认打开用户的文档目录。我如何处理文件路径中的逗号以获得所需的结果?

public partial class DrawingFound
{
    public string DrawingName;
    public string FileType;
    public string FileDirectory;
    public string Revision;

    public void OpenDrawing()
    {
        Process.Start("Explorer.exe", FileDirectory);
    }
}

public void GetDrawings()
{
    string _searchFolder = @"C:\Users\ThisUser\Documents";
    string _fileToSearch = "Example of file, where a comma is used.txt";

    ObservableCollection<DrawingFound> _drawings = new();
    DirectoryInfo dirInfo = new(_searchFolder);
    FileInfo[] files = dirInfo.GetFiles($"*{_fileToSearch}*", SearchOption.AllDirectories);

    foreach (FileInfo file in files)
    {
        if (!_drawings.Any(item => $"{item.DrawingName}{item.FileType}" == file.Name))
        {
            _drawings.Add(new DrawingFound
            {
                DrawingName = Path.GetFileNameWithoutExtension(file.Name),
                FileType = file.Extension,
                FileDirectory = file.FullName,
                Revision = "- Ignore -"
            });
        }
    }
}
g2ieeal7

g2ieeal71#

根据您的操作系统,您可能需要使用“转义”
例如,要将字符串one "two" three存储在用引号分隔的文本中,您需要对引号进行转义。根据语言和环境的不同,“转义符”可以是\
在这个例子中:

foo = "one \"two\" three"

我希望这能有所帮助;否则,请更具体地说明您的语言、操作系统等。

jc3wubiy

jc3wubiy2#

感谢大家对这件事的帮助。我设法解决了这个问题,现在操作按预期工作。@乔治Rey按照你的例子,我添加了转义字符来实现这一点:

Process.Start("explorer.exe", $"\"{FileDirectory}\"");
ecfsfe2w

ecfsfe2w3#

编辑完成后,问题就更加明显了:
我猜你的操作系统是windows。
问题不在于逗号,而在于空格。
系统将空格前的字符作为“文件路径”,其余字符作为“参数”,这是历史原因。
用“嵌入式引号”将整个路径括起来,这样操作系统就可以清楚地知道整个字符串是一个路径。这应该可以防止它试图从该字符串中省略命令参数

相关问题