2013-03-30 33 views
17

Tôi cần đọc một tệp từ tài nguyên của mình và thêm tệp đó vào danh sách. mã của tôi:Đọc tệp văn bản từ C# Tài nguyên

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 
    } 
} 

Ive tìm kiếm này và câu trả lời duy nhất đã nhận được như "Assembly.GetExecutingAssembly...." nhưng chương trình của tôi doesnt có tùy chọn hội.?

+1

Bạn đã thêm 'using System.Reflection;' ở đầu trang của bạn chưa? – keyboardP

+1

Bạn có vấn đề gì? – Patrick

+0

Tôi đọc nó sẽ hoạt động 'New StreamReader (Assembly.GetExecutingAssembly.GetNamedResourceStream (" [không gian tên chương trình] .Thay đổi Dress.txt ")' – Dobz

Trả lời

29

Hãy thử một cái gì đó như thế này:

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

đâu

enter image description here

7

Bạn cần phải bao gồm using System.Reflection; trong tiêu đề của bạn để có được quyền truy cập vào hội. Điều này chỉ dành cho khi bạn đánh dấu một tệp là "Tài nguyên được nhúng" trong VS.

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

Miễn là bạn bao gồm 'using System.Reflection;' bạn có thể truy cập vào hội như thế này:

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

Hoặc nếu bạn không cần phải thay đổi tên tập tin chỉ cần sử dụng:

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

Mã đầy đủ nên trông như thế này:

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 
    } 
} 
+1

'StreamReader reader = new StreamReader (Assembly.GetExecutingAssembly(). GetManifestResourceStream (" myProg .myText.txt ")) { ' Tùy chọn duy nhất Đây là BaseStream & CurrentEncoding' }; ' – Dobz

+0

Phiên bản .net nào bạn đang sử dụng? Và bạn đang nói người đọc chỉ có 'reader.BaseStream' và' reader .CurrentEncoding'? –

+0

Phiên bản 4? Yup, đó là tất cả những gì xảy ra? – Dobz

1

Just để làm theo điều này, giải pháp AppDeveloper là con đường để đi.

string resource_data = Properties.Resources.test; 
string [] words = resource_data.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries); 
foreach(string lines in words){ 
..... 
} 
0
 [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"); 
     } 

Bạn nhận được các tập tin resouce như một mảng byte, vì vậy bạn có thể sử dụng WriteAllBytes để tạo ra một tập tin mới. Nếu bạn không biết nơi nào bạn có thể ghi tập tin (nguyên nhân quyền truy cập), bạn có thể sử dụng Path.GetTempPath() để sử dụng thư mục tạm thời của PC để ghi tệp mới và sau đó bạn có thể sao chép hoặc làm việc từ đó.

Các vấn đề liên quan