从 C# 资源中读取文本文件

Posted

技术标签:

【中文标题】从 C# 资源中读取文本文件【英文标题】:Read text file from C# Resources 【发布时间】:2013-03-21 06:55:28 【问题描述】:

我需要从我的资源中读取一个文件并将其添加到列表中。 我的代码:

private void Form1_Load(object sender, EventArgs e)

    using (StreamReader r = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.myText.txt")))
    
        //The Only Options Here Are BaseStream & CurrentEncoding
    

我已经搜索过这个并且只得到了像"Assembly.GetExecutingAssembly...."这样的答案,但是我的程序没有Assembly的选项。?

【问题讨论】:

您是否在页面顶部添加了using System.Reflection; 你有什么问题? 我读到这会工作New StreamReader(Assembly.GetExecutingAssembly.GetNamedResourceStream("[program namespace].Thresh Dress.txt") 但它没有.GetNamedResourceStream的选项 确保在输入名称空间时使用下划线而不是空格。如果您仍然需要澄清,请向上滚动到代码顶部,并在其中说明命名空间使用该名称。 【参考方案1】:

试试这样的:

string resource_data = Properties.Resources.test;
List<string> words = resource_data.Split(new[] Environment.NewLine, StringSplitOptions.RemoveEmptyEntries).ToList();

在哪里

【讨论】:

【参考方案2】:

您需要在标题中包含using System.Reflection; 才能访问Assembly。这仅适用于您在 VS 中将文件标记为“嵌入式资源”时。

var filename = "MyFile.txt"
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNameSpace." + filename));

只要您包含“使用 System.Reflection;”您可以像这样访问大会:

Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace." + filename);

或者,如果您不需要更改文件名,只需使用:

Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace.MyFile.txt");

完整的代码应该是这样的:

using(var reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.m‌​yText.txt"))

    string line;
    while ((line = reader.ReadLine()) != null)
    
        // Do some stuff here with your textfile
    

【讨论】:

StreamReader reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("myProg.myText.txt")) 这里唯一的选项是 BaseStream 和 CurrentEncoding` ;` 您使用的是什么版本的 .net?你是说读者只有reader.BaseStreamreader.CurrentEncoding 版本 4?是的,这就是全部? 我无法回答您为什么缺少所有方法。您似乎只有可用的属性。即使 IDE 对您调用这些方法不满意,您是否尝试过编译它?您也可以尝试清理您的项目并重新启动 VS。【参考方案3】:

就在这一点上,AppDeveloper 解决方案是要走的路。

string resource_data = Properties.Resources.test;
string [] words = resource_data.Split(new[] Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
foreach(string lines in words)
.....

【讨论】:

【参考方案4】:
        [TestCategory("THISISATEST")] 
        public void TestResourcesReacheability() 
         
            byte[] x = NAMESPACE.Properties.Resources.ExcelTestFile; 
            string fileTempLocation = Path.GetTempPath() + "temp.xls"; 
            System.IO.File.WriteAllBytes(fileTempLocation, x);   

            File.Copy(fileTempLocation, "D:\\new.xls"); 
        

您将资源文件作为字节数组获取,因此您可以使用 WriteAllBytes 创建一个新文件。如果您不知道可以在哪里写入文件(由于权限和访问权限),您可以使用 Path.GetTempPath() 使用 PC 临时文件夹写入新文件,然后您可以从那里复制或工作。

【讨论】:

以上是关于从 C# 资源中读取文本文件的主要内容,如果未能解决你的问题,请参考以下文章

从文本文件中读取一行,然后用新文本 C# 替换同一行

从 C# 中的文本文件一次读取 10 行

使用 C# 从存储在 azure blob 存储中的 200gb 文本文件中读取一行

如何使用 C# 将 InkML 文件读取为图像或文本

C# 如何在文本文件中添加数据而不清除原来的内容?

C# - 从文本文件中提取卫星两行元素