如何读取项目根目录下的文本文件?
我想读取我添加到我的项目的根目录的文本文件的第一行。 意思是说,我的解决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 newer
或Copy 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
,它将像您这样做。