Код C # не создает каталог или сохраняет файл

1

Я создаю Outlook-плагин, который будет автоматически сохранять сообщения на файловый сервер при получении. Эта часть кода просто не делает то, что она просила сделать!

//RelevantDirectory[0] is the root folder where I want to save stuff, and sits on a mapped network drive where I have full admin permissions.

System.IO.Directory.CreateDirectory(RelevantDirectory[0] + "\\Email Correspondence\\");
System.IO.Directory.CreateDirectory(RelevantDirectory[0] + "\\Email Correspondence\\Outgoing");

mail.SaveAs(RelevantDirectory[0] + "\\Email Correspondence\\Outgoing\\" + mail.SenderName + " - " + string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}", mail.ReceivedTime) + ".msg");
System.Windows.Forms.MessageBox.Show(System.IO.File.Exists(RelevantDirectory[0] + "\\Email Correspondence\\Outgoing\\" + mail.SenderName + " - " + string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}", mail.ReceivedTime) + ".msg").ToString()); //returns True!

MessageBox возвращает True, но файл на самом деле там нет! Код CreateDirectory также не создает каталог - и я уверен, что путь к файлу в программе верен. По этой ссылке я понимаю, что это может иметь какое-то отношение к виртуализации файловой системы. Если да, то как мне решить проблему?

Еще один момент заключается в том, что если я укажу mail.SaveAs на папку "Рабочий стол", он сохранит его.

EDIT По какой-то причудливой причине, используя Path.Combine(). Кредит Синатре. Спасибо за ваши намеки.

  • 0
    Попробуйте использовать Path.Combine при создании патчей.
  • 1
    Вы отладили свой код? Какое значение имеет RelevantDirectory[0] ?
Показать ещё 9 комментариев
Теги:
vsto

1 ответ

0

Проблема в строке:

string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}", mail.ReceivedTime)

При преобразовании в строку это становится чем-то вроде: 1/1/2014 12:35:35 PM при создании файлов "/" и ":" являются незаконными символами, поэтому для минимального изменения количества я предлагаю вам добавить пару функций "Заменить" на конец вашей string.Format вот так:

string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}", mail.ReceivedTime).Replace('/','-').Replace(':',' ')
  • 0
    Я думаю, вы обнаружите, что это не так. Указанный формат вывода явно уже использует символ «-» в качестве разделителей, а не «/». Попробуйте выполнить оператор самостоятельно, указав текущее время даты (DateTime.Now). Вы должны получить что-то вроде 'text-2014-10-11_12-06-55-AM'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню