2016-01-04 13 views
5

Tôi đang cố gắng đọc một tệp văn bản có tên thedata.txt có danh sách các từ mà tôi muốn sử dụng trong trò chơi treo cổ. Tôi đã thử những cách khác nhau, nhưng tôi không thể tìm ra nơi tập tin được đặt, nếu ở tất cả khi ứng dụng chạy. Tôi đã thêm tệp vào dự án của mình và tôi đã thử đặt thuộc tính xây dựng thành nội dung và sau đó nhúng tài nguyên nhưng không thể tìm thấy tệp. Tôi đã tạo một dự án ứng dụng toàn cầu Windows 10. Mã tôi đã thử trông giống như sau:cách đọc một tập tin văn bản trong các cửa sổ ứng dụng phổ dụng

Stream stream = this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream("thedata.txt"); 
      using (StreamReader inputStream = new StreamReader(stream)) 
      { 
       while (inputStream.Peek() >= 0) 
       { 
        Debug.WriteLine("the line is ", inputStream.ReadLine()); 
       } 
      } 

Tôi nhận được ngoại lệ. Tôi cũng đã cố gắng để liệt kê các tập tin trong thư mục khác:

string path = Windows.Storage.ApplicationData.Current.LocalFolder.Path; 
      Debug.WriteLine("The path is " + path); 
      IReadOnlyCollection<StorageFile> files = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFilesAsync(); 
      foreach (StorageFile file2 in files) 
      { 
       Debug.WriteLine("Name 2 is " + file2.Name + ", " + file2.DateCreated); 
      } 

Tôi không thấy tập tin có một trong hai ... Tôi muốn tránh cứng mã hóa các danh sách tên trong chương trình của tôi. Tôi không chắc đường dẫn mà tệp được đặt.

Trả lời

17

mã là rất đơn giản, bạn chỉ cần sử dụng một chương trình hợp lệ URI (ms-phụ lục trong trường hợp của bạn) và biến đổi WinRT InputStream của bạn như một dòng cổ điển NET:

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///thedata.txt")); 
using (var inputStream = await file.OpenReadAsync()) 
using (var classicStream = inputStream.AsStreamForRead()) 
using (var streamReader = new StreamReader(classicStream)) 
{ 
    while (streamReader.Peek() >= 0) 
    { 
     Debug.WriteLine(string.Format("the line is {0}", streamReader.ReadLine())); 
    } 
} 

Đối với các thuộc tính của các tập tin nhúng, "Xây dựng hành động "phải được đặt thành" Nội dung "và" Sao chép vào thư mục Ouput "nên được đặt thành" Không sao chép ".

+0

Mã trên được cung cấp bởi t.ouvre đã trả lời câu hỏi của tôi. Tôi đã xác minh rằng nó hoạt động trên máy tính của tôi và giả lập của tôi. Cám ơn bạn vì đã trả lời câu hỏi của mình. –

+0

Hoạt động như một sự quyến rũ. Cảm ơn – lightstalker89

4

Bạn không thể sử dụng phương pháp NET IO cổ điển trong các ứng dụng Windows Runtime, cách thích hợp để đọc một tập tin văn bản trong UWP là:

var file = await ApplicationData.Current.LocalFolder.GetFileAsync("data.txt"); 
var lines = await FileIO.ReadLinesAsync(file); 

Ngoài ra, bạn không cần một con đường vật lý của một thư mục - từ msdn:

Không dựa vào thuộc tính này để truy cập thư mục, vì hệ thống tệp không có sẵn cho một số thư mục. Ví dụ: trong các trường hợp sau đây, thư mục có thể không có đường dẫn hệ thống tệp hoặc hệ thống tệp đường dẫn có thể không khả dụng. • Thư mục đại diện cho vùng chứa cho nhóm tệp (ví dụ: giá trị trả về từ một số quá tải của phương pháp GetFoldersAsync) thay vì thư mục thực trong hệ thống tệp . • Thư mục được hỗ trợ bởi một URI. • Thư mục đã được chọn theo số bằng bộ chọn tệp.

3

Vui lòng tham khảo File access permissions để biết thêm chi tiết. Và Create, write, and read a file cung cấp ví dụ liên quan với File IO cho các ứng dụng UWP trên Windows 10

Bạn có thể lấy một tập tin trực tiếp từ thư mục địa phương của ứng dụng của bạn bằng cách sử dụng một ứng dụng URI, như thế này:

using Windows.Storage; 

StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appdata:///local/file.txt"); 
+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài viết chất lượng thấp/10763931) –

+0

Cảm ơn! Đã cập nhật đoạn mã. –

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