嘿所以我试图使用相对路径访问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”。有几个可能的原因:
•文件名或路径不存在。 •该文件正由另一个程序使用。 ?您尝试保存的工作簿与当前打开的工作簿具有相同的名称。
非常感谢任何帮助。谢谢!
答案 0 :(得分: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+文件夹深,或找不到目标文件夹等。
答案 1 :(得分: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枚举中有许多众所周知的文件夹,您可以使用上述方法到达放置文件的位置
答案 2 :(得分:0)
我相信PATH类将处理单斜杠(以及路径字符串中的任意方式的双斜杠//或\ - )。但我认为你需要两个点,而不仅仅是一个。
.. \ - 一个文件夹
。 - 这个文件夹
您可以使用您创建的字符串来测试您是否拥有正确的路径来编写新文件并查看它的最终位置。