2016-03-17 2 views
0

У меня есть приложение, которое заполняет текстовое поле из SQL-запроса.Как избежать текста из текстового поля?

на моем SQL таблицы, мое местоположение сервера показывает, как \\disk\path\path2\file.pdf

в моих приложениях TextBox это также показывает, как \\disk\path\path2\file.pdf

но в моем коде, я есть кнопка, которая открывает файл с Process.Start(scanDLTextBox.Text);

, но при им отладке мое текстовое поле отображается как scanDLTextBox.Text "\\\\disk\\path\\path2\\file.pdf" string.

из-за дополнительных \ я получаю ошибку

Система не может найти указанный файл

так что мой вопрос, как я удалить лишнюю \ из текстового поля?

Process.Start(scanDLTextBox.Text.Replace(@"\\", @"\")); оленья кожа удалить дополнительный \

+0

Как вы убедитесь, что ваш '' scanDLTextBox.Text' показывает "\\\\ диск \\ путь \\ \\ path2 файл file.pdf" '? Это от отладчика? Если да, расслабьтесь! :) Это просто представление отладчика ... Ваша фактическая строка не изменяется. Если вы получаете сообщение об ошибке, потому что вы не можете найти указанный файл, проблема должна лежать где-то в другом месте. – Ian

+0

Да, его показы в отладчике, вставляя путь в run (ctrl + r), берут меня прямо в файл, поэтому я знаю, что файл существует. я просто не могу получить доступ к нему из своего приложения. любые предложения относительно того, что может вызвать мою ошибку? – lizzy81

+0

Каков фактический путь '\\ disk'? – Ian

ответ

1

Отладчик покажет вам эту дополнительную \, но если вы нажмете magnificer рядом с ним, вы увидите соответствующее значение строки.

Try, чтобы увидеть, если файл существует на самом деле:

 string path = scanDLTextBox.Text; 

     FileInfo fi = new FileInfo(path); 

     bool exists = fi.Exists; 

Кроме того, если его сетевой диск, вы в состоянии получить к нему доступ?

Если вы используете процесс Ара, чтобы запустить его, попробуйте:

Process process = new Process(); 
process.StartInfo.FileName = @"\\disk\path\path2\file.pdf"; 
process.StartInfo.UseShellExecute = true; 
process.StartInfo.ErrorDialog = true; 
process.Start(); 

проверить это свойство ErrorDialog, он должен попросить аутентификацию.

+0

файл существует и им удается получить к нему доступ. вставка пути в run (ctrl + r) приведет меня прямо к файлу. Я не думаю о какой-либо другой причине, почему он не может получить доступ к файлу. im tinkering с ответом ians, я могу просто жестко определить базовый путь и добавить acutal путь во время выполнения. если все остальное не работает – lizzy81

+0

'FileInfo' имеет' GetAccessControl' - вы можете проверить. Также 'FileInfo.FullName' может быть полезным. Попробуйте посмотреть, как он будет работать с сетевым файлом. – makro88

-1

Присвоить текст переменной:

string text1 = scanDLTextBox.Text; 

Process.Start (text1);

Если это не сработает с IntelliSense, если текст действительно экранирован. Вам нужно, например, заменить.() Обратную косую черту.

0

Попробуйте следующие

var path = Regex.Replace(scanDLTextBox.Text, @"[\\]{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); 
Смежные вопросы