System.ArgumentException:path中的非法字符。 错误

我从下面的代码得到一个ArgumentException:

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

我发现堆栈溢出这个代码。 链接:// C#:将受保护的工作表复制到另一个excel文件我不完全知道它是什么。 请告诉我是什么 这个代码我正在build设成一个exe文件。

最后,我需要将一个工作表复制到另一个文件。

我在做什么错 我在服务器上部署这个。

这个代码看起来是做什么的,是它得到你的工作目录(无论你的代码与哪个exe相关),并将它与"C:\\somename.xls"结合起来(这是没有道理的)。

我想你可能有这样的想法

 string strPath=@"somename.xls"; 

所以假设你正在运行你的应用程序

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

该代码将做什么是将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。

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

你的代码应该是:

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

你需要双反斜杠。

代码有两个问题,

第一

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

\是一个特殊字符,用于确定其他字符。 比如'\n'是一个换行符。 '\\'是实际的反斜杠。

第二

filePath包含一个根pathC:\\Path.Combine只会返回filePath ,不能合并。

你的主要问题是在startPath参数。 System.Diagnostics.Process.GetCurrentProcess()。MainModule.FileName如果你跟踪你的代码在FileName你会看到一个坏的符号字符女巫是非法的