2017-10-11 35 views
0

我想實現一個程序,將從YouTube下載視頻文件。我已經寫了這個有兩個文件的小窗口控制檯應用程序。C#應用程序下載youtube文件給出UnauthorizedAccessException

Downloader.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 
using VideoLibrary; 
using System.IO; 

namespace AsyncAwait 
{ 
    public class Downloader 
    { 

     public Task DownloadFilesAsync() 
     { 
      // In the Real World, we would actually do something... 
      // For this example, we're just going to print file 0, file 1. 
      //this will execute the function in a strictly sequential manner. 

      //await DownloadFile0(); 
      //await DownloadFile1(); 

      //var task1 = DownloadFile0(); 
      //var task2 = DownloadFile1(); 
      //return Task.WhenAll(task1, task2); 

      //var tasks = new Func<Task>[] 
      //{ 
      // () => DownloadFile(1), 
      // () => DownloadFile(2), 
      // () => DownloadFile(3), 
      // () => DownloadFile(4), 
      // () => DownloadFile(5) 
      //}; 
      //return Task.WhenAll(tasks.Select(task => task()).ToArray()); 

      var tasks2 = new Func<Task>[] 
      { 
       () => DownloadYoutubeVideo("https://www.youtube.com/watch?v=OGxgnH8y2NM"), 
       () => DownloadYoutubeVideo("https://www.youtube.com/watch?v=FNQxxpM1yOs"), 
      }; 
      return Task.WhenAll(tasks2.Select(task => task()).ToArray()); 
     } 

     private void SaveVideoToDisk(string link) 
     { 
      var youTube = YouTube.Default; // starting point for YouTube actions 
      var video = youTube.GetVideo(link); // gets a Video object with info about the video 
      File.WriteAllBytes(@"C:\" + video.FullName, video.GetBytes()); 
     } 

     public async Task DownloadYoutubeVideo(string link) 
     { 
      await Task.Run(() => SaveVideoToDisk(link)); 
     } 

     public async Task DownloadFile(int TaskNumber) 
     { 
      int count = 0; 
      while (count < 100) 
      { 
       Console.WriteLine("Downloading File {0,2} ----> {1,3}%", TaskNumber, count); 
       await Task.Delay(100); 
       count++; 
      } 
      await Task.Delay(100); 
     }  
    } 
} 

的Program.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace AsyncAwait 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Downloader d = new Downloader(); 
      d.DownloadFilesAsync().Wait(); 
      Console.WriteLine("finished");    
     } 
    } 
} 

在這裏,我得到以下錯誤。

Unhandled Exception: System.AggregateException: One or more errors occurred. ---> System.UnauthorizedAccessException: Access to the path 'C:\Practical Machine Learning Tutorial with Python Intro p.1 - YouTube.mp4' is denied. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.File.InternalWriteAllBytes(String path, Byte[] bytes, Boolean checkHost) 
    at System.IO.File.WriteAllBytes(String path, Byte[] bytes) 
    at AsyncAwait.Downloader.SaveVideoToDisk(String link) in C:\Software\csharppen\AsyncAwait\AsyncAwait\Downloader.cs:line 50 
    at AsyncAwait.Downloader.<>c__DisplayClass2_0.<DownloadYoutubeVideo>b__0() in C:\Software\csharppen\AsyncAwait\AsyncAwait\Downloader.cs:line 55 
    at System.Threading.Tasks.Task.InnerInvoke() 
    at System.Threading.Tasks.Task.Execute() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
    at AsyncAwait.Downloader.<DownloadYoutubeVideo>d__2.MoveNext() in C:\Software\csharppen\AsyncAwait\AsyncAwait\Downloader.cs:line 55 
    --- End of inner exception stack trace --- 
    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 
    at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 
    at System.Threading.Tasks.Task.Wait() 
    at AsyncAwait.Program.Main(String[] args) in C:\Software\csharppen\AsyncAwait\AsyncAwait\Program.cs:line 14 

爲什麼會發生此錯誤。我正在使用libvideo下載YouTube視頻

+3

儘量不要將文件保存到C的根文件夾:,最新版本的Windows受到保護。 –

回答

1

您是否創建了這個目錄?

「C:\實用機器學習教程與Python介紹第1頁 - YouTube.mp4」

框架試圖訪問這個路徑

相關問題