我的相对path有什么问题?

嘿,所以我想使用相对path访问Excel文件,因为应用程序将运行在不同的计算机上,所以path不会总是相同的。 现在我正在做这样的事情:

string exdestination = ".\\..\\..\\..\\Files"; string difDestination = Path.Combine(exdestination, "CATTII." + exTable + "-diff.xls"); //string difDestination = @"C:\Users\Me\Documents\Visual Studio 2010\Projects\TranslatorHelper\Files\CATTII.en-US-diff.xls"; 

最后一行是一个注释行,显示了它应该是的path。 但是我不断收到错误:Microsoft Office Excel不能访问文件“C:\ Files”。 有几个可能的原因:

?文件名或path不存在。 •该文件正在被另一个程序使用。 ?试图保存的工作簿与当前打开的工作簿具有相同的名称。

任何帮助将不胜感激。 谢谢!

如果path是相对于您的程序可执行文件,则使用Application.StartupPath作为您的path的基础。 (你不能依赖当前的目录一定是你的exe文件的path;如果调用者希望运​​行程序时可以设置不同的方式,可以通过各种系统操作来改变,比如让用户浏览文件/打开对话框等)

您需要从该path的末尾删除exe名称,如下所示:

 string folder = Path.GetDirectoryName(Application.StartupPath); 

要走上面的3个文件夹,你可以结合一个讨厌的相对path,如“.. \ .. \ ..”或者只是从文件夹中删除3个文件夹:

 for (int i = 0; i < 3; i++) folder = Path.GetDirectoryName(folder); 

然后你需要添加你的path的其余部分:

 folder = Path.Combine(folder, "Files"); string difDestination = Path.Combine(folder, "CATTII." + exTable + "-diff.xls"); 

对于额外的功劳,您可以添加一些error handling来处理您的可执行文件,而不是3 +以上的文件夹,或者找不到目标文件夹等。

也许最好使用一个固定的子目录相对于一个众所周知的文件夹。

在另一台计算机上安装应用程序后,可以使用基本文件夹(如当前用户的MyDocuments或C:\ ProgramData)检索文件,并为应用程序数据文件添加一个子文件夹。

  // This will be on your machine C:\ProgramData string baseDocs = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); // This will point to a subfolder named "TranslatorHelper" inside the ProgramData common folder string difDestination = Path.Combine(baseDocs, "TranslatorHelper", "CATTII." + exTable + "-diff.xls"); 

在Environment.SpecialFolder枚举有许多众所周知的文件夹,您可以使用上面的方法来达到您的位置放置文件

我相信PATH类将处理单斜杠(和双斜线//或\ – 在pathstring中)。 但是我觉得你需要两个小点来开始,而不仅仅是一个。

.. \ – 一个文件夹

。 – 这个文件夹

您可以使用您创build的string来testing您是否拥有正确的path来写入一个新文件并查看它结束的位置。