2013-03-12 181 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中,你会看到一个坏的符号字符女巫是非法

相关问题