【问题标题】:C# app to download youtube files gives UnauthorizedAccessException用于下载 youtube 文件的 C# 应用程序给出 UnauthorizedAccessException
【发布时间】:2017-10-11 18:21:11
【问题描述】:

我正在尝试实现一个从 youtube 下载视频文件的程序。我编写了这个有两个文件的小型 Windows 控制台应用程序。

下载器.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);
        }      
    }
}

程序.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 视频

【问题讨论】:

  • 尽量不要将文件保存到c:的根文件夹,最新版本的windows会受到保护。

标签: c# youtube


【解决方案1】:

这个目录是你创建的吗?

'C:\Practical Machine Learning Tutorial with Python Intro p.1 - YouTube.mp4'

框架正在尝试访问此路径

【讨论】:

    【解决方案2】:

    UnauthorizedAccessException 表示未正确破译流签名。考虑使用YoutubeExplode 作为更新的替代方案。

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多