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

我想读取我添加到我的项目的根目录的文本文件的第一行。 意思是说,我的解决scheme资源pipe理器在我的项目中显示了我的.cs文件的.txt文件。

所以,我试图做到:

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

但是这不起作用,因为它指的是Bin文件夹,我的文件不在那里…我怎样才能做到这一点? :/

谢谢

从解决scheme资源pipe理器中,右键单击myfile.txt并select“属性”

从那里,将Build Action设置为content并将其Copy to Output Directory以便Copy always Copy if newerCopy if newer

在这里输入图像说明

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

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

或者你可以得到这样的基本目录:

 AppDomain.CurrentDomain.BaseDirectory 

将资源文件添加到项目中(右键单击“项目” – >“属性” – >“资源”)。 它说“string”,你可以切换成“文件”。 select“添加资源”并select您的文件。

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

你可以把它embedded(build立动作设置为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); } } 

( 查尔斯从这个答案中得到的一些代码)

 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”,所以只需要附加到您的文件名的最终path,例如:

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

希望能帮助到你。

在这种情况下你必须使用绝对path。 但是,如果您设置CopyToOutputDirectory = CopyAlways ,它将像您这样做。