C# 无法强制转换类型为';System.IO.BufferedStream';

C# 无法强制转换类型为';System.IO.BufferedStream';,c#,windows-8,C#,Windows 8,我在Windows 8应用程序中遇到问题,并从打开的文件中获取steam。在Windows8中读写文件还有其他方法,但为了能够提取标准流,我正在尝试看看是否可以。到目前为止还没有好结果。问题在于System.IO.BufferedStream不是Windows 8应用程序中System.IO的一部分。因此,以下代码: (MemoryStream)(await (await installedLocation.GetFileAsync("SOMEFILE")).OpenStreamForW

我在Windows 8应用程序中遇到问题,并从打开的文件中获取steam。在Windows8中读写文件还有其他方法,但为了能够提取标准流,我正在尝试看看是否可以。到目前为止还没有好结果。问题在于System.IO.BufferedStream不是Windows 8应用程序中System.IO的一部分。因此,以下代码:

    (MemoryStream)(await (await installedLocation.GetFileAsync("SOMEFILE")).OpenStreamForWriteAsync());
我为压缩代码道歉。上面的代码抛出上述异常。问题是,我无法创建缓冲流。我想知道是否有办法解决这个问题


非常感谢您的帮助

根据文档,您应该能够只使用返回的


是否有理由将其强制转换为
内存流

好吧,是的-您正在向
内存流
施压,而它不是
内存流
System.IO.BufferedStream
似乎存在——它只是不公开;这是一个您不必担心的实现细节。但是,您不能将其强制转换为
内存流
,因为它不是内存流


现在还不清楚为什么您要强制转换到
MemoryStream
,但您应该能够使用
Stream
。如果需要
内存流
,则必须自己创建一个并将数据复制到其中。

以下是我在Windows 8中读取/写入文件时使用的代码。它很有效,我希望它也能帮助你

    // Read from a file line by line
    public async Task ReadFile()
    {
        try
        {
            // get the file
            StorageFile myStorageFile = await localFolder.GetFileAsync("MyDocument.txt");
            var readThis = await FileIO.ReadLinesAsync(myStorageFile);
            foreach (var line in readThis)
            {
                String myStringLine = line;
            }
            Debug.WriteLine("File read successfully.");
        }
        catch(FileNotFoundException)
        {              
        }
    }
    // Write to a file line by line
    public async void SaveFile()
    {
        try
        {
            // set storage file
            StorageFile myStorageFile = await localFolder.CreateFileAsync("MyDocument.txt", CreationCollisionOption.ReplaceExisting);
            List<String> myDataLineList = new List<string>();
            await FileIO.WriteLinesAsync(myStorageFile, myDataLineList);
            Debug.WriteLine("File saved successfully.");
        }
        catch(FileNotFoundException)
        {              
        }
    }
//逐行读取文件
公共异步任务ReadFile()
{
尝试
{
//获取文件
StorageFile myStorageFile=wait localFolder.GetFileAsync(“MyDocument.txt”);
var readThis=await FileIO.ReadLinesAsync(myStorageFile);
foreach(readThis中的var行)
{
字符串myStringLine=line;
}
WriteLine(“文件读取成功”);
}
捕获(FileNotFoundException)
{              
}
}
//逐行写入文件
公共异步void保存文件()
{
尝试
{
//设置存储文件
StorageFile myStorageFile=wait localFolder.CreateFileAsync(“MyDocument.txt”,CreationCollisionOption.ReplaceExisting);
List myDataLineList=新列表();
wait FileIO.WriteLinesAsync(myStorageFile,myDataLineList);
WriteLine(“文件保存成功”);
}
捕获(FileNotFoundException)
{              
}
}

与其为压缩的代码道歉,不如提供更少的压缩代码(只需将代码分成两行就可以了)。WinRT创建的流已经被操作系统缓冲了。别帮忙,我只是把它改成了一个流而不是一个记忆流。我通常使用MemoryStream来确保我知道流在内存中。我想我可以理解为什么在读取文件时这是不正确的。假设所有流都相等是一个丑陋的习惯。这是一个习惯,我习惯于将内容缓冲到内存流中;在这里,如果我从一个文件中读取,它实际上并不适用。现在是凌晨4点。@SergueiFedorov:好吧,我建议你改掉这个习惯:)如果你只看一次,那也没关系——甚至在其他情况下,我相信操作系统会做正确的事情。请注意,即使在非WinRT情况下,也不能将任意流强制转换为MemoryStream.Right,因为它不是指向内存中的某个位置,而是指向套接字或文件。这很有意义:)曾经有一段时间,您可以只使用他们的静态文件类,而不使用任何异步内容或他们可爱的新文件夹结构方法。Async是令人惊奇的,但他们把它粘得有点太多了,并且扼杀了更简单的替代方案。老实说,我花了2天时间搜索了一个从文件读/写的示例。对于StreamReader,StreamWriter这曾经是一项简单的任务。但现在我认为使用异步是一种可行的方法。如果其他人有其他方法,更容易读/写文件,我希望他们能在这里分享他们的代码。还请记住,“metro”应用程序有3个文件夹:本地、漫游和临时。你应该用那些。我认为,从自定义文件夹中,您只能读取数据,当您尝试写入数据时,您将得到“fileaccessdenied”。这里有一个链接:我不想争论异步有一个很大的问题。考虑到当今应用程序的复杂性,我们需要异步。就在这种情况下,它非常令人沮丧,因为过去需要2分钟才能写出的东西现在需要更多的考虑。