3

What I am trying to do is read data from a CSV file located within a Windows application folder named "Attachments". In a web application you can get the path of the folder using

Server.MapPath(@"Attachments/sample.csv");

What is the equivalent call from a Windows application?

Below is my code.

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

4 回答 4

2

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

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

但是,如果您的应用程序作为服务运行或使用 ClickOnce 部署,这将不起作用。

于 2012-06-20T22:23:28.933 回答
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

并且,如果为 false,则使用不同的枚举

Environment.SpecialFolder.ProgramFilesX86

但毕竟这一切,我认为你应该改变你的程序架构中的一些东西。
在 Web 应用程序中,通常不使用 web-root 之外的文件夹。
但是 WinForms 应用程序没有这样的限制,然后您可以将 CSV 文件安装在不同的文件夹中(想到 MyDocuments)并通过配置文件中的选项控制硬盘上的实际位置

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

于 2012-06-20T22:21:52.133 回答
1

你可以这样做

Path.Combine(Application.StartupPath, @"Attachment\sample.csv");
于 2012-06-20T22:27:42.913 回答
0

史蒂夫打败了我,但是是的,请检查 intellisense 以获取您要在下面寻找的任何文件夹:

string path = Environment.GetFolderPath(Environment.SpecialFolder.

特性

你会在那里找到各种系统路径。

于 2012-06-20T22:23:38.363 回答