0

嘿,所以我正在尝试使用相对路径访问 excel 文件,因为该应用程序将在不同的计算机上运行,​​因此路径并不总是相同的。现在我正在做这样的事情:

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";

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

• 文件名或路径不存在。• 该文件正被另一个程序使用。• 您尝试保存的工作簿与当前打开的工作簿同名。

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

4

3 回答 3

1

如果路径与您的程序可执行文件相关,则使用Application.StartupPath作为路径的基础。(您不能依赖当前目录一定是您的 exe 所在的路径;如果调用者愿意,可以在运行程序时进行不同的设置,它可以通过各种系统操作进行更改,例如让用户浏览文件/打开对话框等)

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

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

要上 3 个文件夹,您可以组合一个讨厌的相对路径,例如“..\..\..”,或者只是从文件夹中删除 3 个文件夹:

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

然后您需要添加路径的其余部分:

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

为了获得额外的信用,您可以添加一些错误处理来处理您的可执行文件不是 3+ 文件夹深,或者找不到目标文件夹等。

于 2013-09-27T22:14:10.500 回答
1

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

在另一台计算机上安装应用程序后,您可以使用基本文件夹(如当前用户的 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枚举中有许多众所周知的文件夹,您可以使用上述方法到达您放置文件的位置

于 2013-09-27T22:18:20.877 回答
0

我相信 PATH 类将处理单斜杠(以及路径字符串中的双斜杠 // 或 \ -)。但我认为你需要从两个点开始,而不仅仅是一个。

..\ - 上一个文件夹

. - 这个文件夹

您可以通过使用您创建的字符串来测试您是否拥有正确的路径来写入一个新文件并查看它的结束位置。

于 2013-09-27T22:07:54.073 回答