2013-03-12 160 views
1

我真的從下面的代碼得到一個ArgumentException:System.ArgumentException:路徑中的非法字符。錯誤

string [email protected]"C:\somename.xls"; 
startPath=System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 
filePath = System.IO.Path.Combine(startPath, strPath); 

我發現對堆棧溢出的代碼。 鏈接: // C#:Copy protected worksheet to another excel file 我不完全知道它是什麼。請告訴我它是什麼。我將這些代碼構建成一個exe文件。

最後,我需要將一個工作表複製到另一個文件。

我在做什麼錯?我在服務器上部署這個。

+1

C#規格[字符串字面量(http://msdn.microsoft .COM/EN-US /庫/ aa691090(v = VS.71)的.aspx)。順便說一下,爲什麼你初始化字符串filePath兩次? – Steve 2013-03-12 18:15:13

+0

您將一個文字字符串分配給'filePath',然後用'Path.Combine'的結果覆蓋它。你在哪裏得到'strPath'? – yoozer8 2013-03-12 18:15:45

+0

另外,在堆棧溢出的地方,你是否得到了這段代碼?你想問問題/答案嗎?這可能有助於我們更好地理解背景。 – yoozer8 2013-03-12 18:16:15

回答

4

看似代碼做的,是它得到您的工作目錄(無論與您的代碼相關聯的exe是),並與"C:\\somename.xls"結合它(這沒有任何意義。)

我想你可能有打算像

string [email protected]"somename.xls"; 

所以假設你從

"C:\Users\owner\documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug" 

運行你的應用程序是什麼代碼會做的是SE牛逼filePath

"C:\Users\owner\documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\somename.xls" 

我看到的第一件事是

string filePath="C:\somename.xls"; 

\是一個特殊字符,以確定其它字符。例如'\n'是一個換行符。 '\\'是實際的反斜槓。

所以,要與其他\

string filePath="C:\\somename.xls"; 

逃避你\或放一個@在它的前面使它成爲一個文本字符串。

string [email protected]"C:\somename.xls"; 

2

你的代碼應該是:

string filePath = "C:\\somename.xls" 

你需要雙反斜線。

0

兩個問題的代碼,

首先

string filePath="C:\somename.xls"; 

\是一個特殊字符,用於確定其他字符。例如'\n'是一個換行符。 '\\'是實際的反斜槓。

filePath包含根路徑,C:\\Path.Combine只會返回filePath然後,它不能組合。

+0

M Afifi:我編輯了我的帖子,請檢查。 – user2144293 2013-03-12 18:24:18

0

你的主要問題是在startPath參數。 System.Diagnostics.Process.GetCurrentProcess()。MainModule.FileName 如果你跟蹤你的代碼 FileName中,你會看到一個壞的符號字符女巫是非法

相關問題