我想读取我添加到项目根目录的文本文件的第一行。也就是说,我的解决方案资源管理器在我的项目中显示.sxt文件旁边的.txt文件。如何读取项目根目录中的文本文件?
所以,我试图做的:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
但因为它是指bin文件夹,这并不工作,我的文件是不是在那里...我怎样才能使这项工作? :/
谢谢
我想读取我添加到项目根目录的文本文件的第一行。也就是说,我的解决方案资源管理器在我的项目中显示.sxt文件旁边的.txt文件。如何读取项目根目录中的文本文件?
所以,我试图做的:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
但因为它是指bin文件夹,这并不工作,我的文件是不是在那里...我怎样才能使这项工作? :/
谢谢
从Solution Explorer中,右键单击myfile.txt的,并选择 “属性”
从那里,设置Build Action
到content
和Copy to Output Directory
要么Copy always
或Copy if newer
在这种情况下,您必须使用绝对路径。但是,如果您设置了CopyToOutputDirectory = CopyAlways
,它将按照您的操作进行。
你可以使用以下命令获取网站项目的根目录:
String FilePath;
FilePath = Server.MapPath("/MyWebSite");
或者你可以得到的基本目录,如下所示:
AppDomain.CurrentDomain.BaseDirectory
添加一个资源文件到您的项目(右键点击项目 - >属性 - >资源)。它说“字符串”的地方,你可以切换成“文件”。选择“添加资源”并选择您的文件。
您现在可以通过Properties.Resources
集合引用您的文件。
你可以把它嵌入(生成操作设置为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);
}
}
(有些由Charles从this answer采取代码)
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 :\用户\ myuser的\文档\ Visual Studio的2015年\项目\ myProjectNamespace”,所以他们只是在最后的路径,你的文件名,例如:
_filePath += @"\myfile.txt";
TextReader tr = new StreamReader(_filePath);
希望它能帮助。
btw,StreamReader的名称有点令人困惑,微软应该在我看来命名为TextStreamReader –