Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#Console应用程序中的何处放置.csv文件以便直接访问它?_C#_Excel_Csv - Fatal编程技术网

在C#Console应用程序中的何处放置.csv文件以便直接访问它?

在C#Console应用程序中的何处放置.csv文件以便直接访问它?,c#,excel,csv,C#,Excel,Csv,我有一个方法,它获取excel文件的路径并将其打开 我希望能够键入“test.csv”并让程序访问当前目录中的csv文件,而不是键入整个文件路径(如“C:\Users\…”) 原因是,如果我希望压缩项目并将其发送给其他人,我希望其他人能够运行该项目并看到与我相同的结果,而无需进入他们的C:\drive中的某个位置并手动创建excel文件 我使用以下代码检查路径是否存在: if (System.IO.File.Exists(path)) 但是,我无法确定哪个目录是默认目录,因此我可以说“meth

我有一个方法,它获取excel文件的路径并将其打开

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

原因是,如果我希望压缩项目并将其发送给其他人,我希望其他人能够运行该项目并看到与我相同的结果,而无需进入他们的C:\drive中的某个位置并手动创建excel文件

我使用以下代码检查路径是否存在:

if (System.IO.File.Exists(path))
但是,我无法确定哪个目录是默认目录,因此我可以说“method”(“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)”处停止。

将文件放在bin目录中,即与DLL或exe位于同一目录中。这样,您就不必指定路径。警告,事情会变得一团糟。确保你也考虑过清理。

看看这个对象-它给了你很多路径选择。。。基于我相信你要求退房的原因


希望这能奏效

默认值应为执行路径。我相信它在/bin/Debug或/bin/Release中,这取决于您的构建。这是写入.exe或.dll文件的地方。

要获取当前目录路径,可以使用directory.getCurrentDirectory()

此外,您可以通过Path.GetDirectoryName(assembly.getExecutionGassembly().location)找到程序集的位置,然后将该路径用作基本路径

例如,对于位于部件旁边的.csv文件,可以使用以下内容:

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

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

appExcel = new Microsoft.Office.Interop.Excel.Application();
如果在调试模式下查看其属性,则可以找到默认目录。有一种方法可以使用宏更改此默认目录,但在if语句中添加以下行可能更容易:

path = System.IO.Path.GetFullPath(path);
这样,您就可以将Excel文件保存在C#默认目录中,并自动找到它的完整文件路径


可以找到有关使用宏和本主题的更多详细信息。

首字母是启动可执行文件时您在shell中的位置。。或者按照LNK文件中的指定,等等。只要CSV文件与正确的WD相对,那么它就可以在不指定绝对路径的情况下工作。您不必压缩文件并将其发送给其他人进行测试。尝试一些方法,将部署目录复制到磁盘上的其他位置,然后运行该程序。无论如何,只需将其作为内容添加到项目中,并将“在构建时复制”设置为“从不”以外的另一个选项。IMO应用程序对象将仅适用于WinForms应用程序。控制台应用程序、服务或ASP.NET应用程序如何?我将此代码输入并打印出字符串“basepath”和“filepath”,它们位于同一目录中。因此,文件似乎位于正确的目录中,但我仍然得到一个未处理的COMException。