【问题标题】:How to get the location of a file located within a Windows application folder如何获取位于 Windows 应用程序文件夹中的文件的位置
【发布时间】:2012-06-20 22:17:51
【问题描述】:

我要做的是从名为“附件”的 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));
}

【问题讨论】:

    标签: c# windows filepath


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      此枚举可以识别 Windows 应用程序文件夹

      Environment.SpecialFolder.ProgramFiles
      

      MSDN refs

      获取包含实际路径和您编写的完整文件名的字符串

      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-root 之外的文件夹。
      但是 WinForms 应用程序没有这样的限制,然后您可以将 CSV 文件安装在不同的文件夹中(想到 MyDocuments)并通过配置文件中的选项控制硬盘上的实际位置

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

      【讨论】:

      • Enviornment.SpecialForlder.ProgramFilesX86 :)
      • 好吧,除了语法错误:-),你是对的,但是我们需要知道操作系统的位数。
      • 是的。你可以使用编译器条件。
      【解决方案3】:

      你可以用 So 之类的东西来做到这一点

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

      【讨论】:

        【解决方案4】:

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

        string path = Environment.GetFolderPath(Environment.SpecialFolder.
        

        属性

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多