如何获取位于Windows应用程序文件夹中的文件位置

3
我要做的是从名为“Attachments”的Windows应用程序文件夹中读取CSV文件中的数据。在Web应用程序中,您可以使用以下方法获取文件夹的路径:
Server.MapPath(@"Attachments/sample.csv");

从Windows应用程序中调用的等效方法是什么?

以下是我的代码。

string[] str = File.ReadAllLines(@"Attachment/sample.csv");

// create new datatable
DataTable dt = new DataTable();

// get the column header means first line
string[] temp = str[0].Split(';');

// creates columns of gridview as per the header name
foreach (string t in temp)
{
    dt.Columns.Add(t, typeof(string));
}
4个回答

2
Windows应用程序文件夹可以通过这个枚举来识别。
Environment.SpecialFolder.ProgramFiles

MSDN参考

要获取包含实际路径和完整文件名的字符串,您需要编写以下代码:

string pathToFile = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
string fullFileName = Path.Combine(pathToFile, @"Attachment\sample.csv");

正如Cole Johnson在评论中提到的那样,如果您的托管操作系统是64位的,则存在问题。在这种情况下,有两个应用程序文件夹,一个用于64位应用程序,另一个用于32位应用程序。使用NET4,您可以通过该属性发现当前操作系统的位数。

Environment.Is64BitOperatingSystem

如果条件为假,则使用不同的枚举。

Environment.SpecialFolder.ProgramFilesX86

但是,经过所有这些后,我认为您应在程序架构中做出一些改变。
在Web应用程序中,通常不使用Web根目录之外的文件夹。
但是WinForms应用程序没有此限制,因此您可以将CSV文件安装在不同的文件夹中(可以考虑使用“我的文档”),并通过配置文件中的选项控制其在硬盘上的实际位置。

请记住:应用程序文件夹需要特定的写入权限(如果您将附件保存在其中,这是选择与应用程序文件夹不同位置的另一个原因)


或者 Enviornment.SpecialFolder.ProgramFilesX86 :) - Cole Tobin
好的,语法错误除外 :-),你是对的,但在此之前我们需要知道操作系统的位数。 - Steve
是的,你可以使用编译条件。 - Cole Tobin

2

这个路径是相对于可执行文件吗?如果是的话,您可以使用Application.StartupPath来确定程序启动的位置,然后将其与相对文件路径组合以获取完整路径:

var fullPath = Path.Combine(Application.StartupPath, @"Attachment\sample.csv");

如果你的应用程序作为服务运行或使用ClickOnce部署,这种方法将不起作用。

1

您可以使用类似 So 的工具来完成这个任务。

Path.Combine(Application.StartupPath, @"Attachment\sample.csv");

0

Steve 比我先说了,但是是的,在以下目录中检查智能感知以获取您正在查找的任何文件夹:

string path = Environment.GetFolderPath(Environment.SpecialFolder.

属性

您将在那里找到各种系统路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接