我想阅读添加到项目根目录的文本文件的第一行。意思是,我的解决方案资源管理器在项目中的.cs文件旁边显示.txt文件。
因此,我尝试做:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
但这是行不通的,因为它是指Bin文件夹,而我的文件不在其中...我该如何工作?:/
谢谢
Answers:
在解决方案资源管理器中,右键单击myfile.txt,然后选择“属性”
从那里,将Build Action
要content
和Copy to Output Directory
任Copy always
或Copy if newer
Embedded Resource
和阅读T ON如何阅读emebedded资源文章blogs.msdn.com/b/nikola/archive/2008/05/14/...
您可以使用以下命令获取网站项目的根目录:
String FilePath;
FilePath = Server.MapPath("/MyWebSite");
或者,您可以像这样获取基本目录:
AppDomain.CurrentDomain.BaseDirectory
将资源文件添加到项目中(右键单击“项目”->“属性”->“资源”)。如果显示“字符串”,则可以切换为“文件”。选择“添加资源”,然后选择您的文件。
现在,您可以通过Properties.Resources
集合引用您的文件。
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);
希望能帮助到你。
您也可以将其嵌入(将构建操作设置为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);
}
}
在这种情况下,您必须使用绝对路径。但是,如果设置了CopyToOutputDirectory = CopyAlways
,它将按您的方式工作。
在此代码中,您可以访问root
目录项目:
string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
然后:
StreamReader r = new StreamReader(_filePath + "/cities2.json"))