2011-06-20 124 views
65

我想读取我添加到项目根目录的文本文件的第一行。也就是说,我的解决方案资源管理器在我的项目中显示.sxt文件旁边的.txt文件。如何读取项目根目录中的文本文件?

所以,我试图做的:

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

但因为它是指bin文件夹,这并不工作,我的文件是不是在那里...我怎样才能使这项工作? :/

谢谢

+0

btw,StreamReader的名称有点令人困惑,微软应该在我看来命名为TextStreamReader –

回答

97

从Solution Explorer中,右键单击myfile.txt的,并选择 “属性”

从那里,设置Build ActioncontentCopy to Output Directory要么Copy alwaysCopy if newer

enter image description here

+2

我宁愿没有将这个文件暴露给我的用户......有没有一种方法可以将它嵌入到dll中并读取它从那里? – foreyez

+2

@foreyez将字符串作为资源添加到项目中,而不是使用文件。请注意,数据不会无法获取 - 此文件包含的数据有多敏感? –

+4

将构建选项设置为'Embedded Resource'并阅读有关如何阅读嵌入式资源的文章http://blogs.msdn.com/b/nikola/archive/2008/05/14/embedded-resources.aspx – Sung

3

在这种情况下,您必须使用绝对路径。但是,如果您设置了CopyToOutputDirectory = CopyAlways,它将按照您的操作进行。

25

你可以使用以下命令获取网站项目的根目录:

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

或者你可以得到的基本目录,如下所示:

AppDomain.CurrentDomain.BaseDirectory 
23

添加一个资源文件到您的项目(右键点击项目 - >属性 - >资源)。它说“字符串”的地方,你可以切换成“文件”。选择“添加资源”并选择您的文件。

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

9

你可以把它嵌入(生成操作设置为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); 
    } 
} 

(有些由Charlesthis answer采取代码)

9
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); 

希望它能帮助。

相关问题