Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下载文件并打开它们_C#_File_Windows 8_Download_Windows 8.1 - Fatal编程技术网

C# 下载文件并打开它们

C# 下载文件并打开它们,c#,file,windows-8,download,windows-8.1,C#,File,Windows 8,Download,Windows 8.1,我有一个显示视频文件的用户控件 代码是: //The code does: Checks if file exists, if yes - opens, if not - goes to download manager and downloads it. //After await dMan.downloadVideo(link); finishes - function recursivly calls itself, but code runs into Unauthorized Acc

我有一个显示视频文件的用户控件

代码是:

//The code does: Checks if file exists, if yes - opens, if not - goes to download manager and downloads it. 
//After await dMan.downloadVideo(link); finishes - function recursivly calls itself, but code runs into Unauthorized Access Exception
private async void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        await LoadVideo();
    }

    private async Task LoadVideo()
    {
        string link = "http://samples.mplayerhq.hu/MPEG-4/MargotGagnon.mov";
        DownloadManager dMan = new DownloadManager();
        bool FileNeedsDownload = false;
        try
        {
            Windows.Storage.StorageFile sampleFile = await ApplicationData.Current.LocalFolder.GetFileAsync("Margot.mp4");
            var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
            VideoPlayer.SetSource(stream, sampleFile.FileType);
        }
        catch
        {
            FileNeedsDownload = true;
        }
        if (FileNeedsDownload == true)
        {
            await dMan.downloadVideo(link);
            LoadVideo();
        }
    }
我的下载代码:

public async Task downloadVideo(string link)
    {
        string path = ApplicationData.Current.LocalFolder.Path.ToString();
            string urlLink = link;
            await getVideoByUrl(urlLink, "Margot.mp4");
    }
    async public Task getVideoByUrl(string url, string filename)
    {
        HttpClientHandler aHandler = new HttpClientHandler();
        aHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
        HttpClient aClient = new HttpClient(aHandler);
        aClient.DefaultRequestHeaders.ExpectContinue = false;
        HttpResponseMessage response = await aClient.GetAsync(url);
        byte[] img = await response.Content.ReadAsByteArrayAsync();// ReadAsByteArray();
        InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();

        // To save downloaded image to local storage
        var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
        filename, CreationCollisionOption.ReplaceExisting);
        var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite);
        DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0));

        writer.WriteBytes(await response.Content.ReadAsByteArrayAsync());
        await writer.StoreAsync();
        //current.image.SetSource(randomAccessStream);
        writer.DetachStream();
        await fs.FlushAsync();

        // To save downloaded image to bitmap
        //DataWriter writer2 = new DataWriter(randomAccessStream.GetOutputStreamAt(0));
        //writer2.WriteBytes(img);
        //await writer2.StoreAsync();
        //current.image = new BitmapImage();
        //current.image.SetSource(randomAccessStream);
    }
例外情况:

捕获到System.UnauthorizedAccessException HResult=-2147024891 消息=访问被拒绝。(HRESULT异常:0x80070005(E_访问被拒绝)) Source=mscorlib 堆栈跟踪: at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中 在c:\Users\afomenko\Desktop***\Controls\VideoControl.xaml.cs中的SalesPlays.Controls.VideoControl.d_u3.MoveNext()中:第43行 内部异常:

p.S.当我在一段迷恋视频下载后运行应用程序时(当然,因为下载是有效的),然后打开视频。为什么第一次使用unthorized失败?


可能我的下载程序中没有关闭某些流?

解决方案在我的保存代码中

以下是一个工作示例:

var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, Windows.Storage.CreationCollisionOption.ReplaceExisting);
using (var fs = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite))
{
    var outStream = fs.GetOutputStreamAt(0);
    var dataWriter = new Windows.Storage.Streams.DataWriter(outStream);
    dataWriter.WriteString("Hello from Test!");
    await dataWriter.StoreAsync();
    dataWriter.DetachStream();
    await outStream.FlushAsync();
    outStream.Dispose(); // 
    fs.Dispose();
}