Доступ к папке запрещен C # - PullRequest
0 голосов
/ 25 ноября 2018

Я довольно новый программист на C #, и я столкнулся с ошибкой, не поддающейся моей способности исправить.

В настоящее время я работаю над написанием диска с несогласными, и при попытке создать экземпляр и Program объект, он возвращает «Ошибка доступа запрещена».Проблема заключается в том, что ошибка относится к папке, а не к файлу, и я попытался исправить ее.

  • Запуск Visual Studio от имени администратора
  • Обеспечение моейучетная запись имеет права доступа к файлам и папкам
  • Изменение расположения файлов проекта
  • Перезапуск Visual Studio
  • Перекодирование проекта с чистого листа
  • Обеспечение того, чтобы папка и файлы не были доступны только для чтения

В этой строке выдается ошибка: => new Program().MainAsync().GetAwaiter().GetResult();

На данный момент у меня практически нет идей.Полная информация о сообщении об исключении:

System.UnauthorizedAccessException HResult = 0x80070005 Сообщение = Доступ к пути 'C: \ Users \ XXX \ source \ repos \ discordBot \ discordBot \ bin \Отладка запрещена.Source = mscorlib StackTrace: в System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath) в System.IO.FileStream.Init (String path, FileMode mode, доступ к FileAccess, права Int32, логические useRights, общий ресурс FileShare, Int32 bufferSize,Параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, логическое bFromProxy, логическое значение useLongPath, логическое checkHost) в System.IO.FileStream..ctor (путь строки, режим FileMode, доступ к FileAccess) в train_bot.Program.d__3.MoveNext (\ Users \ XXX \ source \ repos \ discordBot \ discordBot \ Program.cs: строка 46 в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAnd-задача-отладчик).Runtime.CompilerServices.TaskAwaiter.GetResult () в train_bot.Program.Main (String [] args) в C: \ Users \ XXX \ source \ repos \ discordBot \ discordBot \ Program.cs: строка 21

Менее подробная версия

System.UnauthorizedAccessException: 'Доступ к пути 'C: \ Users \ SettingAdmin \ source \ repos \ discordBot \ discordBot \ bin \ Debug' запрещен. '

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

using Discord;
using Discord.Commands;
using Discord.WebSocket;

namespace train_bot
{
    class Program
    {

        private DiscordSocketClient Client;
        private CommandService Commands;
        static void Main(string[] args)
        => new Program().MainAsync().GetAwaiter().GetResult();


        private async Task MainAsync()
        {
            //configuring client 
            Client = new DiscordSocketClient(new DiscordSocketConfig
            {
                LogLevel = LogSeverity.Debug    //changes detail in log
            });

            Commands = new CommandService(new CommandServiceConfig
            {
                CaseSensitiveCommands = true,
                DefaultRunMode = RunMode.Async,
                LogLevel = LogSeverity.Debug
            });

            Client.MessageReceived += Client_MessageReceived;
            await Commands.AddModulesAsync(Assembly.GetEntryAssembly());

            Client.Ready += Client_Ready;
            Client.Log += Client_Log;

            string Token = "";
            using (var Steam = new FileStream(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location).Replace(@"bin\Debug\netcoreapp2.0", @"Token.txt"), FileMode.Open, FileAccess.Read))using (var ReadToken = new StreamReader(Steam))
            {
                Token = ReadToken.ReadToEnd();
            }

            await Client.LoginAsync(TokenType.Bot, Token);
            await Client.StartAsync();

            await Task.Delay(-1);
        }

        private async Task Client_Log(LogMessage Message)
        {
            Console.WriteLine($"{DateTime.Now} at {Message.Source}] {Message.Message}");

        }

        private async Task Client_Ready()
        {
            await Client.SetGameAsync("Hentai King 2018", "", StreamType.NotStreaming);
        }

        private async Task Client_MessageReceived(SocketMessage arg)
        {
            //Configure the commands
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Как и в случае ошибки, у вас нет доступа к этой папке.Если вы работаете с ним в режиме отладки, убедитесь, что вы запускаете Visual Studio от имени администратора, чтобы игнорировать все это в среде разработки.Если она развернута, убедитесь, что учетная запись, на которой запущена ваша программа, имеет соответствующие права на эту папку.

0 голосов
/ 25 ноября 2018

Проблема может заключаться в том, что вы пытаетесь открыть каталог в виде файла.Путь, который вы создаете:

Path.GetDirectoryName(Assembly.GetEntryAssembly().Location).Replace(@"bin\Debug\netcoreapp2.0", @"Token.txt")

Это будет работать только в том случае, если Assembly.GetEntryAssembly (). Location действительно содержит строку @ "bin \ Debug \ netcoreapp2.0".

Вы, вероятно, намеревались что-то вроде

Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)), @"Token.txt")

...