2014-10-10 49 views
1

我正在做一个Outlook插件,它会自动保存邮件到文件服务器收到时。这部分代码根本不会做它要求做的事情!C#代码不创建目录或保存文件

//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.aveAs到桌面文件夹,它将其保存。

编辑由于一些离奇的原因,使用Path.Combine()工作。感谢Sinatr。感谢大家的提示。

+0

尝试在创建路​​径时使用'Path.Combine'。 – Sinatr 2014-10-10 08:40:41

+1

你调试了你的代码吗? 'RelevantDirectory [0]'的价值是什么? – 2014-10-10 08:40:58

+0

你不需要创建每个文件夹,只需使用'System.IO.Directory.CreateDirectory(RelevantDirectory [0] +“\\ Email Correspondence \\ Outgoing”);'将创建你所需的文件夹结构。 – Bolu 2014-10-10 08:44:56

回答

0

的问题是在该行:

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

当转换成字符串财产以后像就变成:创建文件时2014年1月1日下午12点35分35秒 一个“/”和“:”是非法字符,所以对于最小数量的更改,我建议你在字符串的末尾添加几个替换函数。格式如下:

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' – Adrian 2014-10-10 13:11:38

相关问题