Lê Hiển Vinh Ответов: 3

Проблема с файлом поток с#


Мой код здесь:
string sapath1 = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows));
            File.SetAttributes(sapath1, FileAttributes.Normal);

            MD5 md5 = MD5.Create();
            StringBuilder sb = new StringBuilder();

            using (FileStream st = new FileStream(sapath1, FileMode.Open, FileAccess.Read, FileShare.Read))// error here
            {
                foreach (byte b in md5.ComputeHash(st))
                    sb.Append(b.ToString("x2").ToLower());
            }

            label1.Text =  sb.ToString();

Я получил ошибку: система.UnauthorizedAccessException: 'доступ к пути 'C:\' запрещен.'

Что я уже пробовал:

Помогите мне, пожалуйста. Есть ли какое-то решение для этого?

3 Ответов

Рейтинг:
7

Patrice T

Цитата:
Есть ли какое-то решение для этого?

Да, не пытайтесь работать непосредственно с корнем Тома C. Windows ограничивает его использование, потому что это опасно.
Работа над подкаталогом. C:\MyWorkingDir\


BillWoodruff

Мой голос № 2: Вы не можете установить атрибуты FileAttributes ни в одном каталоге: только в файле.

Patrice T

Привет Билл,
Ошибка связана с созданием файла, и я знаю, что windows активно предотвращает ее в корневом каталоге системного тома для обычных приложений.
-Вы не можете установить атрибуты FileAttributes ни в одном каталоге: только в файле.
На самом деле, в прошлом я использовал атрибуты файлов в каталогах, чтобы скрыть их.

Patrice T

Только что видел его, но похоже, что ОП нашел мой ответ полезным. :)
Может быть, все не так уж и плохо.

BillWoodruff

Вы ошибаетесь: вызываете 'файл.Метод setAttribute на любой путь приведет в:

Система.UnauthorizedAccessException

Существует еще один механизм установки атрибутов каталога: используйте свойство "атрибуты каталога" DirectoryInfo.

Patrice T

Я делал это в диком мире MS-DOS :)

BillWoodruff

Зная, что ты иногда ошибаешься, я чувствую себя менее неуверенно :)

Patrice T

Я делаю это чаще, чем иногда, Вот почему я так часто рекомендую отладчик :)

Рейтинг:
1

phil.o

Отладьте свой проект: вы узнаете, что sapath1 содержит путь не к файлу, а к корневому диску (скорее всего, c:\).
Я думаю, что вы забыли сослаться на фактический файл; вы не можете открыть поток в каталоге, не говоря уже о корневом диске.


BillWoodruff

+5 ты справился.

phil.o

Спасибо :)

Рейтинг:
1

OriginalGriff

Нет. "Доступ запрещен" означает именно то, что он говорит - пользователь, под управлением которого работает ваше приложение, не имеет доступа к файлу или папке, которые вы пытаетесь открыть.

Переместите файл в более общедоступную папку или измените пользователя. Вы не можете "обойти" эту проблему.


BillWoodruff

Ошибка здесь является результатом вызова 'File.SetAttributes на диске или в каталоге.

Lê Hiển Vinh

Как получить md5 всех файлов в папке c#?

OriginalGriff

Прочитайте список файлов папок: каталог.Заражен сделает это.
Прочитайте каждый файл и вычислите MD5. Имейте в виду, что GetFiles вернет скрытые файлы, которые вы не можете прочитать и должны пропустить.