2013-12-20 2 views
0

Я пытаюсь сохранить некоторые данные в файл, но файлы сохраняются в неправильном каталоге.Сохраненные файлы содержат (назад) слэши

using (StreamWriter sw = new StreamWriter(dir + "\\temp" + x + ".txt")) 
    sw.Write(data); 

В Windows это прекрасно работает. Однако, когда я запускаю это на Linux (Ubuntu, но я не думаю, что это важно), в Mono мои файлы сохраняются с помощью обратных косых черт в имени.

Я пробовал использовать Path.Combine(dir, "temp" + x + ".txt"); и косые черты. Не работает.

У кого-нибудь есть предложения?

EDIT: Оказывается, мои «попытки» вышеупомянутых решений были не очень хорошими. Я так привык к перекомпиляции Visual Studio при каждом запуске приложения, которое я забыл проверить, действительно ли MonoDevelop сделал то же самое.

После внесения изменений и перестройки я обнаружил, что все три решения, представленные в ответах, работают.

ответ

3

Использовать Path.DirectorySeparatorChar вместо жесткого кодирования \. Это расширится до правильной косой черты на соответствующей платформе.

2

Не используйте обратную косую черту вообще, вместо этого используйте косую черту. Работает на Unix и все версии DOS и Windows - да еще и обратно в DOS 2.0

ДОБАВЛЕНО

Создать все промежуточные каталоги, первым перед созданием файла.

ADDED педантичного RANT

Хотя Path.Combine часто полезно, я в основном жестко закодировать слэш вместо этого для удобства, когда я использую строки пути непосредственно в текстовых строках, так как код легче читать (1 символ vs. многие), и он всегда работает. Я полагаю, что теоретически .Net можно было бы портировать на то, что не принимает косая черта в качестве разделителя путей, но количество разломов будет настолько серьезным, я ожидаю, что инфраструктура .Net на этой платформе будет транслировать разделитель путей внутри.

+0

Вначале создайте промежуточные каталоги. –

+0

Добавлен также rant. –

2

NET Framework предоставляет вам множество инструментов для работы с путями. Начиная от класса Path

using (StreamWriter sw = new StreamWriter(Path.Combine(dir, "temp", x + ".txt")) 
    sw.Write(data); 

Нет косой или обратного косой

SIDE ПРИМЕЧАНИЕ: Path.Combine метода, который принимает 3 струнных аргументы, чтобы объединить в правильном пути для текущей операционной системы, можно получить NET.4.0 вперед

Смежные вопросы