2014-10-10 83 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

相關問題