如何读取项目根目录中的文本文件?

时间:2011-06-20 19:44:28

标签: c# wpf

我想阅读我添加到项目根目录的文本文件的第一行。这意味着,我的解决方案资源管理器在我的项目中的.cs文件旁边显示.txt文件。

所以,我试着这样做:

TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();

但这不起作用,因为它指的是Bin文件夹而我的文件不在那里......我怎样才能使这个工作? :/

由于

7 个答案:

答案 0 :(得分:119)

在Solution Explorer中,右键单击myfile.txt并选择“Properties”

从那里开始,将Build Action设置为contentCopy to Output DirectoryCopy alwaysCopy if newer

enter image description here

答案 1 :(得分:30)

您可以使用以下命令获取网站项目的根目录:

String FilePath;
FilePath = Server.MapPath("/MyWebSite");

或者您可以像这样获得基本目录:

AppDomain.CurrentDomain.BaseDirectory

答案 2 :(得分:28)

将资源文件添加到项目中(右键单击Project-> Properties-> Resources)。如果它表示“字符串”,您可以切换为“文件”。选择“添加资源”并选择您的文件。

您现在可以通过Properties.Resources集合引用您的文件。

答案 3 :(得分:12)

private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

上面的方法会带给你这样的东西:

"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"

从这里,您可以使用System.IO.Directory.GetParent:

向后导航
_filePath = Directory.GetParent(_filePath).FullName;

1次会到达\ bin,2次会到达\ myProjectNamespace,所以它会是这样的:

_filePath = Directory.GetParent(Directory.GetParent(_filePath).FullName).FullName;

好了,现在你有类似“C:\ Users \ myuser \ Documents \ Visual Studio 2015 \ Projects \ myProjectNamespace”的东西,所以只需附加你的fileName的最终路径,例如:

_filePath += @"\myfile.txt";
TextReader tr = new StreamReader(_filePath);

希望它有所帮助。

答案 4 :(得分:11)

你可以嵌入它(构建动作设置为Resource),这是从那里检索它的方法:

private static UnmanagedMemoryStream GetResourceStream(string resName)
{
    var assembly = Assembly.GetExecutingAssembly();
    var strResources = assembly.GetName().Name + ".g.resources";
    var rStream = assembly.GetManifestResourceStream(strResources);
    var resourceReader = new ResourceReader(rStream);
    var items = resourceReader.OfType<DictionaryEntry>();
    var stream = items.First(x => (x.Key as string) == resName.ToLower()).Value;
    return (UnmanagedMemoryStream)stream;
}

private void Button1_Click(object sender, RoutedEventArgs e)
{
    string resName = "Test.txt";
    var file = GetResourceStream(resName);
    using (var reader = new StreamReader(file))
    {
        var line = reader.ReadLine();
        MessageBox.Show(line);
    }
}

(部分代码来自this answer Charles

答案 5 :(得分:3)

在这种情况下,您必须使用绝对路径。但是如果你设置CopyToOutputDirectory = CopyAlways,它就会像你一样工作。

答案 6 :(得分:1)

在此代码中,您可以访问root目录项目:

 string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

然后:

StreamReader r = new StreamReader(_filePath + "/cities2.json"))