絞首刑執行人のゲームで使用したい単語のリストが含まれているthedata.txtという名前のテキストファイルを読み込もうとしています。さまざまな方法を試しましたが、アプリの実行時にファイルが配置される場所がわかりません。ファイルをプロジェクトに追加し、ビルドプロパティをコンテンツに設定してからリソースを埋め込もうとしましたが、ファイルが見つかりません。 Windows10ユニバーサルアプリプロジェクトを作成しました。私が試したコードは次のようになります。
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());
}
}
例外が発生します。また、別のディレクトリにあるファイルを一覧表示しようとしました。
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);
}
そこにもファイルが表示されません...プログラムで名前のリストをハードコーディングするのは避けたいです。ファイルが配置されているパスがわかりません。
コードは非常に単純です。有効なスキームURI(この場合はms-appx)を使用し、WinRTInputStreamを従来の.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()));
}
}
埋め込みファイルのプロパティについては、「ビルドアクション」を「コンテンツ」に設定し、「出力ディレクトリにコピー」を「コピーしない」に設定する必要があります。
Windowsランタイムアプリで従来の.NET IOメソッドを使用することはできません。UWPでテキストファイルを読み取る適切な方法は、次のとおりです。
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("data.txt");
var lines = await FileIO.ReadLinesAsync(file);
また、フォルダの物理パスは必要ありません-from msdn :
一部のフォルダではファイルシステムパスを使用できないため、このプロパティに依存してフォルダにアクセスしないでください。たとえば、次の場合、フォルダにファイルシステムパスがないか、ファイルシステムパスが使用できない可能性があります。 •フォルダーは、ファイルシステム内の実際のフォルダーではなく、ファイルのグループのコンテナー(たとえば、GetFoldersAsyncメソッドの一部のオーバーロードからの戻り値)を表します。 •フォルダはURIでバックアップされています。 •フォルダーは、ファイルピッカーを使用して選択されました。
詳細については、 ファイルアクセス許可 を参照してください。そして ファイルの作成、書き込み、読み取り は、Windows10上のUWPアプリのファイルIO)に関連する例を提供します。
次のように、アプリのURIを使用して、アプリのローカルフォルダーからファイルを直接取得できます。
using Windows.Storage;
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appdata:///local/file.txt");