【问题标题】:Read files from a Folder present in project从项目中存在的文件夹中读取文件
【发布时间】:2012-11-25 14:05:32
【问题描述】:

我有一个 C# 项目(Windows 控制台应用程序)。 我在项目中创建了一个名为 Data 的文件夹。 Data文件夹中有两个文本文件。

如何从“数据”文件夹中读取文本文件。 我尝试了以下事情。

string[] files = File.ReadAllLines(@"Data\Names.txt")

找不到文件是错误的。

我已经检查了之前发布的一些 Stackoverflow 答案,但没有一个对我有用。

我该如何继续?谢谢!

【问题讨论】:

  • 谷歌“当前目录”。可执行文件不一定从您的源代码文件夹中运行!
  • 您在构建项目时是否将此数据文件夹复制到输出?检查文件上的选项并更正它。
  • 设置为始终复制到输出目录。

标签: c#


【解决方案1】:

这取决于您的数据文件夹在哪里

获取.exe文件所在目录:

AppDomain.CurrentDomain.BaseDirectory

获取当前目录:

Environment.CurrentDirectory

然后你可以连接你的目录路径(@"\Data\Names.txt"

【讨论】:

    【解决方案2】:

    下面的代码应该可以工作:

    string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"Data\Names.txt");
    string[] files = File.ReadAllLines(path);
    

    【讨论】:

    • 我的文件夹和文件在程序集文件夹中不存在 :s .. 为什么会这样?
    • 在Visual Studio中,标记文件,然后将Build Action设置为Content,将Copy to Output Directory设置为Copy always
    • 只需使用@"Data\Name.txt" 应用@FlorianMoser 表示法
    • “@”是什么意思?
    • @这里叫做逐字字符串字面量,见stackoverflow.com/questions/3311988/…
    【解决方案3】:

    如果您需要获取名为'Data'的文件夹中的所有文件,只需将其编码如下

    string[] Documents = System.IO.Directory.GetFiles("../../Data/");
    

    现在“文档”由“数据”文件夹“数据”中两个文本文件的完整对象名称数组组成。

    【讨论】:

    • @Bunyip:你需要阅读文本文件的内容还是只知道文件夹中的文件?
    【解决方案4】:

    设置了始终复制到输出目录,然后尝试以下操作:

     Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
     String Root = Directory.GetCurrentDirectory();
    

    【讨论】:

    • 这应该是公认的答案 - 无论文件是在库中还是在可执行项目中,它都是可靠的。
    • 主要思想是通过将复制始终设置为输出目录,它始终复制bin文件夹下的文件/文件夹,AppDomain.CurrentDomain.BaseDirectory返回bin文件夹路径。例如,如果您在 ExcelSettings 文件夹下有 Products.xlsx,您可以通过以下方式获得它: Path.Combine(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory), "ExcelSettings\\Products.xlsx)
    【解决方案5】:

    我有一个 C# 项目(Windows 控制台应用程序)。我在项目中创建了一个名为 Images 的文件夹。有一个名为 MyIcon.ico 的 ico 文件。我访问了Images文件夹中的MyIcon.ico,如下所示。

    this.Icon = new Icon(@"../../Images/MyIcon.ico");
    

    【讨论】:

      【解决方案6】:

      使用此代码也可以读取文件夹和子文件夹中的所有文件

      class Program
      {
          static void Main(string[] args)
          {
      
              getfiles get = new getfiles();
              List<string> files =  get.GetAllFiles(@"D:\Document");
      
              foreach(string f in files)
              {
                  Console.WriteLine(f);
              }
      
      
              Console.Read();
          }
      
      
      }
      
      class getfiles
      {
          public List<string> GetAllFiles(string sDirt)
          {
              List<string> files = new List<string>();
      
              try
              {
                  foreach (string file in Directory.GetFiles(sDirt))
                  {
                      files.Add(file);
                  }
                  foreach (string fl in Directory.GetDirectories(sDirt))
                  {
                      files.AddRange(GetAllFiles(fl));
                  }
              }
              catch (Exception ex)
              {
      
                  Console.WriteLine(ex.Message);
              }
      
      
      
              return files;
          }
      }
      

      【讨论】:

        【解决方案7】:

        对于 Xamarin.iOS,如果文件存在,您可以使用以下代码获取文件的内容。

        var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        var filename = Path.Combine(documents, "xyz.json");
        if (File.Exists(filename))
        {
        var text =System.IO.File.ReadAllText(filename);
        }
        

        【讨论】:

          【解决方案8】:
          string myFile= File.ReadAllLines(Application.StartupPath.ToString() + @"..\..\..\Data\myTxtFile.txt")
          

          【讨论】:

          • 请添加一些文字,详细说明其工作原理/作用
          • 虽然这可能会回答作者的问题,但它缺少一些解释性文字和/或文档链接。如果没有围绕它们的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请edit你的答案-From Review
          【解决方案9】:

          这对我很有帮助,如果您使用

          var dir = Directory.GetCurrentDirectory()
          

          路径填充超出当前文件夹,它将包含此路径\bin\debug 我向您推荐的是,您可以使用

          string dir = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName
          

          然后打印 dir 值并验证路径是否为您提供

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-08-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-07-21
            • 2018-05-13
            • 1970-01-01
            相关资源
            最近更新 更多