Из-за того, что песочницы UWP получают доступ к файловой системе, вы не можете создать FileStream
непосредственно из пути StorageFile
. Вместо этого у вас есть несколько вариантов, от самого простого до самого сложного:
1) Если ваш файл достаточно мал, вы можете просто использовать помощники в классе FileIO
stati c, чтобы прочитать его все сразу:
string text = await FileIO.ReadTextAsync(file); // or ReadLinesAsync or ReadBufferAsync, depending on what you need
2) Используйте метод OpenAsync()
в StorageFile:
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowReadersAndWriters))
{
// your reading code here
}
Если вам нужно, вы можете конвертировать между IRandomAccessStream
и. NET Stream
s с методами расширения AsStream()
, AsStreamForRead()
и AsStreamForWrite()
для IRandomAccessStream
, документы для которых здесь .
3) Если вы хотите полного контроля Вы можете получить SafeFileHandle
в базовый файл, используя CreateSafeFileHandle()
, например:
SafeFileHandle fileHandle = file.CreateSafeFileHandle(FileAccess.Read, FileShare.ReadWrite);
Затем вы можете использовать этот дескриптор файла для создания стандартного FileStream
:
using (FileStream fs = new FileStream(fileHandle, FileAccess.Read))
{
// Read stuff here
}
Это единственный способ надежно использовать FileStream
на UWP StorageFile
, и его следует использовать с некоторой осторожностью. Официальные документы имеют более подробную информацию о последствиях этого .