我正在创建一个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代码也不创建目录 - 我确信程序中的文件路径是正确的。我从这个link了解到这可能与文件系统虚拟化有关。如果是这样,我该如何解决这个问题?
还有一点是,如果我将mail.SaveAs指向Desktop文件夹,则会将其保存。
编辑出于某些奇怪的原因,使用Path.Combine()
工作了。感谢Sinatr。谢谢你的提示。
答案 0 :(得分:0)
问题在于:
string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}", mail.ReceivedTime)
当转换为字符串时,它会变成:2014年1月1日12:35:35 PM 在创建文件时' /'和':'是非法字符,所以对于最小量的更改,我建议你在string的末尾附加一对Replace函数。格式如下:
string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}", mail.ReceivedTime).Replace('/','-').Replace(':',' ')