Проблемы Слэша и побега в C#


Я хочу записать некоторые данные в Excel на C# с помощью COM, но у меня проблема с сохранением. Давайте посмотрим код:

  1. workSheet.SaveAs("c:/users/amare/sub.xls");
    

    Приведенный выше код вызовет ошибку:

    " Microsoft Excel не может открыть файл c://users/amare/sub.xls."

    Но приведенный ниже код прекрасно работает:

  2. workSheet.SaveAs("c:\users/amare/sub.xls");
    
  3. workSheet.SaveAs(@"c:usersamaresub.xls");
    
Теперь я совершенно запутался в этой ситуации. Я знаю, что 2) и 3) абсолютно правы, но я привык писать код, как 1):
StreamWriter sw = new StreamWriter("c:/users/amare/desktop/file.txt");
sw.WriteLine("foo-bar");
sw.close();

Это всегда хорошо работает. Поэтому я хочу знать, почему этого не происходит в этот раз. По-видимому, C# неправильно избегает пути в 1).

2 4

2 ответа:

По-видимому, workSheet.SaveAs() делает свою собственную проверку и исправление пути. Таким образом, вы (по праву) наказаны за использование недопустимого формата. Этот формат обычно принимается, но "обычно" - это не то же самое, что "всегда".

Я попробовал ваш путь и, конечно, он не работает с сообщением о том, что путь недействителен или не доступен для записи. Я также попытался записать файл в подпапку Documents (где предоставляется разрешение на запись), но снова появляется та же ошибка. Таким образом, это определенно проблема внутри синтаксического анализатора взаимодействия Excel. Я думаю, что в windows вы должны избегать этого разделителя путей.

Если вы используете дословные строки, определенные префиксом строки с @ char

workSheet.SaveAs(@"c:\users\amare\sub.xls");

Все работает, как и ожидалось.