8

我从以下代码中得到一个 ArgumentException:

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

我在 Stack Overflow 上找到了这段代码。链接: C#:将受保护的工作表复制到另一个 excel 文件 我不完全知道它是什么。请告诉我它是什么。我正在将这段代码构建到一个 exe 中。

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

我在做什么错?我将它部署在服务器中。

4

4 回答 4

10

该代码的作用是获取您的工作目录(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";

@或通过在其前面放置 a 使其成为文字字符串。

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

于 2013-03-12T18:13:11.490 回答
3

您的代码应该是:

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

你需要双反斜杠。

于 2013-03-12T18:13:26.833 回答
0

您的主要问题在于startPath参数。

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

如果你跟踪你的代码,FileName你会看到一个坏的符号字符女巫是非法的

于 2013-12-09T17:52:23.873 回答
0

代码有两个问题,

第一的

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

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

第二

filePath包含根路径,C:\\. Path.Combine只会返回filePath,它不能合并。

于 2013-03-12T18:22:18.140 回答