Я создаю 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()
. Кредит Синатре. Спасибо за ваши намеки.
Проблема в строке:
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(':',' ')
Path.Combine
при создании патчей.RelevantDirectory[0]
?