从项目中存在的文件夹中读取文件


87

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

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

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

找不到文件,这是错误的提示。

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

我该如何进行?谢谢!


1
Google“当前目录”。可执行文件不一定从您的源代码文件夹中运行!
Ondrej Tucny

在构建项目时是否将此数据文件夹复制到输出中?检查文件上的选项并进行更正。
ryadavilli

设置为始终复制到输出目录。
SKJ 2012年

Answers:


122

下面的代码应该工作:

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

我的文件夹和文件不存在于Assembly文件夹中:s ..为什么?
bohem.be

33
在Visual Studio中,选中文件,然后设置Build ActionContent,并Copy to Output DirectoryCopy always
弗洛里安·莫泽

3
只需使用@FlorianMoser表示法使用@“ Data \ Name.txt”
Alexandr Sargsyan

“ @”是什么意思?
gumuruh19年

@称为逐字字符串文字,请参见stackoverflow.com/questions/3311988/…–
Morbia

34

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

要获取.exe文件所在的目录:

AppDomain.CurrentDomain.BaseDirectory

要获取当前目录:

Environment.CurrentDirectory

然后,您可以串联目录路径(@"\Data\Names.txt"


18

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

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

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


@Bunyip:您需要阅读文本文件的内容还是只是想知道文件夹中的文件?
Uthistran Selvaraj 2012年

13

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

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

9

设置总是复制到输出目录,然后尝试以下操作:

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

这应该是公认的答案-无论文件是在库中还是在可执行项目中,它都是可靠的。
Tullochgorum

0

对于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);
}

-1

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

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;
    }
}

-1
string myFile= File.ReadAllLines(Application.StartupPath.ToString() + @"..\..\..\Data\myTxtFile.txt")

3
请添加一些文字,详细说明其工作原理/功能
-Gibolt

1
虽然这可以回答作者的问题,但缺少一些解释性的单词和/或指向文档的链接。没有一些原始短语的话,原始代码片段不是很有用。您可能还会发现如何写一个好的答案很有帮助。请编辑您的答案-点评
尼克

-1

使用它,就可以了。

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"TestData\test.json");
var response = JsonConvert.DeserializeObject<Response>(File.ReadAllText(path));

请注意:您需要确保将文件的属性设置test.json

“生成操作” =“内容”

“复制到输出目录” =“始终复制”


在回答一个旧问题时,如果您包含一些上下文来解释您的答案有什么帮助,特别是对于已经接受了该问题的问题,那么对于其他StackOverflow用户来说,您的答案将更加有用。请参阅:如何写一个好的答案
David Buck

-2

如果您使用

var dir = Directory.GetCurrentDirectory()

路径填充超出当前文件夹,它将包含此路径\ bin \ debug我建议您使用的是

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.