我想阅读我添加到项目根目录的文本文件的第一行。这意味着,我的解决方案资源管理器在我的项目中的.cs文件旁边显示.txt文件。
所以,我试着这样做:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
但这不起作用,因为它指的是Bin文件夹而我的文件不在那里......我怎样才能使这个工作? :/
由于
答案 0 :(得分:119)
在Solution Explorer中,右键单击myfile.txt并选择“Properties”
从那里开始,将Build Action
设置为content
和Copy to Output Directory
到Copy always
或Copy if newer
答案 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"))