在C#控制台应用程序中放置.csv文件以便直接访问它的位置?

我有一个方法,需要一个Excel文件的path,并打开它。

而不是input整个文件path(比如“C:\ Users \ …”),我希望能够input“test.csv”并让程序访问当前目录中的csv文件。

原因是,如果我想压缩项目并将其发送给其他人,我希望其他人能够运行它,并看到与我一样的结果,而不必在C:\驱动器中的某个位置手动创buildexcel文件。

我正在使用下面的代码来检查path是否存在:

if (System.IO.File.Exists(path)) 

但是,我无法找出哪个目录是默认的目录,所以我可以说'方法(“test.csv”)“。

编辑:我把Excel文件放在bin \ Debug目录下(它有一堆.dll和.exe文件),但是这个方法调用仍然会抛出一个错误,说找不到文件。 我得到以下错误:“COMException是未处理 – 'test.csv'找不到”。 当我点击查看详细信息,我看到“System.Runtime.InteropServices.COMException”。

编辑2:这是我在方法中的:

 appExcel = new Microsoft.Office.Interop.Excel.Application(); if (System.IO.File.Exists(path)) { aWorkbook = appExcel.Workbooks.Open(path, true, true); aWorkSheet = (_Worksheet)appExcel.ActiveWorkbook.ActiveSheet; } else { Console.WriteLine("Unable to open file"); System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel); appExcel = null; } 

程序停止在未处理的COMException的'aWorkbook = appExcel.Workbooks.Open(path,true,true)'行。

要获取当前的目录path,可以使用Directory.GetGetCurrentDirectory()。

此外,您可以通过Path.GetDirectoryName(Assembly.GetExecutingAssembly()。位置)find您的程序集的位置,然后使用该path作为您的基本path。

例如,位于程序集旁边的file.csv可以使用以下命令:

 string basePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string filePath = Path.Combine(basePath, "file.csv"); 

将文件放在bin目录中 – 即在与dll或exe相同的目录中。 这样你就不必指定path。 警告,事情变得混乱。 确保你也考虑清理。

看看应用程序对象 – 它提供了大量的path选项…根据我相信你要检查出StartupPath 。

希望这个窍门!

默认应该是执行path。 我相信它在/ bin / Debug或/ bin / Release中,具体取决于你的构build。 这就是.exe或.dll文件将被写入的地方。

Excel对象正在使用的目录与C#使用的目录不同。 所以在这一行

 appExcel = new Microsoft.Office.Interop.Excel.Application(); 

如果在debugging模式下查看其属性,可以find默认的目录。 有一种方法可以使用一个macros来改变这个默认的目录,但是在if语句的下面一行中可能会更容易:

 path = System.IO.Path.GetFullPath(path); 

这样,您可以将Excel文件保存在C#的默认目录中,并自动find完整的文件path。

在这里可以find关于使用macros和这个主题的更多细节。