【问题标题】:Open file with blank spaces in filename打开文件名中包含空格的文件
【发布时间】:2015-09-23 17:48:17
【问题描述】:

它如何理解分隔参数等空格:

            const string args = "";

            string result = args + openFileDialog; //For test purpose only
            var app = new ProcessStartInfo(Application.ExecutablePath, result);

            Proc

当我启动我的应用程序的另一个实例时,我使用参数通过 StreamReader 读取文件:

_fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8, false, 512, true);

var result = streamReader.ReadToEnd();

我的日志文件输出是这样的(我已经删除了一些信息,所以它更具可读性):

【问题讨论】:

  • 您是否尝试过明确引用文件路径?在路径周围放一些",看看它是否有效。
  • 是的,我试过用引号和双引号。我放了一个断点并编辑了结果字符串。就像在 'C:\...\file test.txt' 中一样。
  • 所以你正在启动另一个应用程序实例,传入一些文件名作为参数。所以你的 main 方法应该会读取这个参数并用它做一些事情。你能告诉我们你在 Main 方法中对这样的参数做了什么吗?
  • @Yacoub 我将第一个参数作为文件路径。获得文件路径后,我尝试使用 StreamReader 进行读取。我正在尝试简化代码,以便更新我的问题。
  • 你能否将filePath打印到控制台只是为了测试,然后取它的值,然后尝试通过记事本打开它来查看它是否存在

标签: c# wpf openfiledialog


【解决方案1】:

尝试用双引号将参数括起来。注意“\””中\之前的空格。

像这样:

...

string result = ...;

result = " \"" + result + " \"";

...

【讨论】:

  • 我已经试过了。我用简单的引号尝试了同样的方法。它在字符串的开头和结尾添加一个 \"。
  • 当我在 "\"" 中的 \ 之前放置一个空格时,它起作用了。请更新你的答案,我会标记它。
  • 我认为我们需要解释为什么会发生这种情况。对于正在阅读本文的人来说,为什么我们需要额外的空间是没有意义的。你能提供更多信息吗?例如,修复后结果变量的最终内容是什么?另外,新进程中 filePath 变量的值是多少?还有main方法中命令行参数的值是多少?
  • "\"" 没有空格只是在整个字符串之前添加一个 \,这就是问题所在。
  • 其实"\""应该加了"而不是\
【解决方案2】:

试试:

string result = openFileDialog.FileName;

带空格的文件名可以正常加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多