我有一个应用程序,它从sql查询中填充文本框。
在我的sql表上,我的服务器位置显示为\\disk\path\path2\file.pdf
在我的应用文本框中,它也会显示为\\disk\path\path2\file.pdf
但是在我的代码中,我有一个按钮,用Process.Start(scanDLTextBox.Text);
但是在我调试时,我的文本框显示为scanDLTextBox.Text "\\\\disk\\path\\path2\\file.pdf" string.
因为额外\
我收到了错误
系统找不到指定的文件
所以我的问题是,如何从文本框中删除额外的\
?
Process.Start(scanDLTextBox.Text.Replace(@"\\", @"\"));
不会删除额外的\
答案 0 :(得分:1)
调试器会向您显示额外的\
,但是如果您点击旁边的放大器,您将看到正确的字符串值。
尝试查看文件是否确实存在:
string path = scanDLTextBox.Text;
FileInfo fi = new FileInfo(path);
bool exists = fi.Exists;
此外,如果是网络驱动器,您是否可以访问它?
如果您使用Process启动它,请尝试使用:
Process process = new Process();
process.StartInfo.FileName = @"\\disk\path\path2\file.pdf";
process.StartInfo.UseShellExecute = true;
process.StartInfo.ErrorDialog = true;
process.Start();
检查这个ErrorDialog属性,它应该要求验证。
答案 1 :(得分:0)
尝试以下
var path = Regex.Replace(scanDLTextBox.Text, @"[\\]{2,}", @"\");
答案 2 :(得分:0)
我建议一个简单的循环:
private static String UnEscape(String source) {
if (String.IsNullOrEmpty(source))
return source;
StringBuilder Sb = new StringBuilder(source.Length);
for (int i = 0; i < source.Length; ++i) {
Char ch = source[i];
Sb.Append(ch);
if ((ch == '\\') && (i < source.Length - 1) && (source[i + 1] == '\\'))
i += 1; // skip next slash \
}
return Sb.ToString();
}
...
String source = @"\\\\disk\\path\\path2\\file.pdf";
// "\\disk\path\path2\file.pdf"
String result = UnEscape(source);
答案 3 :(得分:-1)
将文字分配给变量:
string text1 = scanDLTextBox.Text;
的Process.Start(文本);
如果文本确实被转义,那么在使用IntelliSense时无法检查。例如,你需要.Replace()反斜杠。