3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77

Отказано в доступе по пути С#

07.06.2015, 08:16. Показов 23916. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!

Снова я обращаюсь к вам с вопросом..
Знчт, имеется программка, которая состоит из двух форм. На одной листбокс, на другой текстбокс. При загрузке, в листбокс на первой форме попадает список текстовых файлов из директории N. При даблклике на любой из элементов, вызывается вторая форма с текстбоксом, в который передается текстовая информация из одноименного файлика. Если создать новый элемент и сохранить его - в директории N создается текстовый файлик, имеющий название, соответствующее Теме заметки и содержание, соответствующее ее тексту.
Получается что-то вроде справочника заметок.

И горя я с этим не знал до тех пор, пока не начал думать, как это чудо заставить работать на другом компьютере. Раньше то у меня файлики по умолчанию были в папочке Debug. И был прописан полный путь до нее в обработчиках. А как сделать программу универсальной, чтобы она работала на любом компьютере? Там ведь не будет такой папки с таким адресом. И поэтому я решил сделать следующее: так как программка маленькая и легкая, смысла делать установщик для нее, наверное, нет.
Поэтому скидывается она на другой компьютер просто в папке.
А в коде я вместо конкретных ссылок на директорию, откуда брать список файлов и куда сохранять, прописал просто Enviropement.CurrentDirectory, чтобы программа работала с той папкой, откуда запускается и файлики сохраняла туда же.

Но появилась ненавистная ошибка - Отказано в доступе по пути.. бла бла

Воспользовался поиском на этом форуме. Работаю я под админской учеткой, запуск от имени администратора пробовал, манифест делал, с правами на папки шаманить пробовал. Ноль реакции.

Подскажите, пожалуйста, как можно все таки победить эту проблему с правами?
Или, если ну никак нельзя, возможно есть какой то другой принцип, по которому можно организовать работу с неизвестными директориями на чужом компе, чтобы описанная мной программа работала не только у меня?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.06.2015, 08:16
Ответы с готовыми решениями:

Отказано в доступе по пути
Доброго времени суток! Вот уже полчаса пытаюсь создать текстовый файл в папке temp(использую Path.GetTempPath()+"my\\directory"),...

Отказано в доступе по пути
Пытаюсь сделать программу чтобы удаляла файл config_4.xml в папке после AppData, но пишет отказано в доступе, прописал...

FileStream - "Отказано в доступе по пути."
Hi. Проблема такова: есть клиент и сервер. Клиент отсылает файл, сервер его принимает. Для этого на сервере крутится в отдельном потоке код...

14
Эксперт .NET
 Аватар для Rius
13127 / 7688 / 1676
Регистрация: 25.05.2015
Сообщений: 23,458
Записей в блоге: 14
07.06.2015, 09:11
Цитата Сообщение от Katbert Посмотреть сообщение
Enviropement.CurrentDirectory
Костыль, дошедший до нас со времён MS-DOS. Забудьте про него.
См. в справке про Path.GetDirectoryName(), Path.Combine(), Application.ExecutablePath.
1
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
08.06.2015, 14:21  [ТС]
Rius, как то так что ли ? =>

C#
1
string path = Path.GetDirectoryName(Application.ExecutablePath);
Однако, работает, видит файлики, находящиеся в директории, открывает их как элементы справочника заметок.
Но главная проблема как была, так и осталась - при попытке создать новую заметку (стало быть создать новый файл в директории) - отказано в доступе по пути.
0
146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
08.06.2015, 14:23
При запуске от администратора тож не работает?
1
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
08.06.2015, 14:29  [ТС]
KeBJIaP, писал уже, что да
0
Эксперт .NET
 Аватар для Rius
13127 / 7688 / 1676
Регистрация: 25.05.2015
Сообщений: 23,458
Записей в блоге: 14
08.06.2015, 14:34
Katbert, вам при создании файла требуется полный путь? Где вы его создаёте, с использованием упомянутых мной функций?
0
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
08.06.2015, 14:44  [ТС]
Rius, создаю в папке, в которой находится приложение. Любой абсолютно. Вот для пробы на рабочем столе создал папочку, кинул туда файлы программы. Кинул интереса ради текстовых файлов. Запустил - файлы видит, то есть вариант рабочий, в какой бы директории файлы программы не находились, она ищет именно в ней, все как мне и нужно.
А вот создать файл я нигде не могу. Он находит путь к нужной директории. Но вот отказано в доступе. Папка не ридонли, галочку снял.. доступ стоит полный, учетка админская, от имени админа запускал... колдунство какое то..

Механизм сохранения таков:

C#
1
2
3
4
5
6
7
8
9
10
11
12
private void button1_Click(object sender, EventArgs e)
        {
            string fName = textBox2.Text; //Имя создаваемого файла = Тема заметки
            string fText = textBox1.Text; // Содержимое создаваемого файла = Тело заметки
            string path = Path.GetDirectoryName(Application.ExecutablePath); 
            
            StreamWriter a = new StreamWriter(path);
            File.CreateText(fName + ".txt");
            a.WriteLine(fText);
            a.Close();
            this.Close();
        }
0
146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
08.06.2015, 15:05
Katbert,
C#
1
2
3
4
5
6
7
8
            string fName = "111"; //Имя создаваемого файла = Тема заметки
            string fText = "1111111111111111111111111111"; // Содержимое создаваемого файла = Тело заметки
            string path = Path.GetDirectoryName(Application.ExecutablePath);
 
            StreamWriter a = new StreamWriter(File.Create(fName + ".txt"));
            //File.CreateText(fName + ".txt");
            a.WriteLine(fText);
            a.Close();
1
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
08.06.2015, 15:16  [ТС]
KeBJIaP, тогда уж

C#
1
2
3
4
5
6
7
string fName = "111"; //Имя создаваемого файла = Тема заметки
            string fText = "1111111111111111111111111111"; // Содержимое создаваемого файла = Тело заметки
             
            StreamWriter a = new StreamWriter(File.Create(fName + ".txt"));
            //File.CreateText(fName + ".txt");
            a.WriteLine(fText);
            a.Close();
Ибо объявление переменной path нам уже ни к чему. Я понял. Я сам себя перехитрил. Если директория явно не указана, то файл создается в той директории, из которой запускается приложение.

Всем большое спасибо, проблема с доступом таким образом решена.

Rius, таки к вопросу о костылях..


C#
1
string path = Path.GetDirectoryName(Application.ExecutablePath);
Такой способ использования данных функций допустим? Или я снова создал инвалида?
0
146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
08.06.2015, 15:28
Katbert, Application.ExecutablePath уже содержит строку с полным именем директории.

Добавлено через 2 минуты
C#
1
fName + ".txt"
Так не надо с директориями, для этого используйте
C#
1
Path.Combine(fName,".txt")
Ошибся
0
Эксперт .NET
 Аватар для Rius
13127 / 7688 / 1676
Регистрация: 25.05.2015
Сообщений: 23,458
Записей в блоге: 14
08.06.2015, 15:54
C#
1
2
3
4
5
6
7
8
string filename = "111.txt"; //Имя создаваемого файла = Тема заметки
string ftext = "1111111111111111111111111111"; // Содержимое создаваемого файла = Тело заметки
string dir = Path.GetDirectoryName(Application.ExecuatblePath);
 
using (StreamWriter a = new StreamWriter(File.Create(Path.Combine(dir, filename))))
  a.WriteLine(ftext );
  a.Close();
}
0
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
09.06.2015, 13:00  [ТС]
Rius, а в чем разница? Чем эта конструкция помогает? Так быстрее? Или помогает предотвратить какие то ошибки?

И еще вопрос - а почему, собственно, возникала проблема с правами? А то, если честно, чувствую себя сейчас макакой - научился нажимать кнопку и получать банан, а принцип, по которому это работает так и не понял
0
Эксперт .NET
 Аватар для Rius
13127 / 7688 / 1676
Регистрация: 25.05.2015
Сообщений: 23,458
Записей в блоге: 14
09.06.2015, 13:11
Использование одного имени файла или относительного пути приводит к задействованию current directory. Если она не известна или явно не задана заранее, запись пойдёт неизвестно куда (точнее туда, где эта рабочая директория в данный момент). Из под отладчика, или из проводника Windows рабочая директория по умолчанию устанавливается к директории с исполняемым файлом, при запуске через ярлык - надо настраивать ярлык, при запуске через сервисы - тоже как-то там. Если не настроена - указывает куда одна Windows знает, например в C:\Windows\System32.
Поэтому всегда используйте полные (абсолютные) пути к файлам и не парьтесь.
0
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
09.06.2015, 13:39  [ТС]
Rius, если я правильно понимаю - абсолютный путь к файлу - то есть указание на конкретное место в файловой системе.. Но я не могу в таком приложении указывать на конкретное место - есть всего лишь папка, куда ее положит пользователь известно одному ему, может, на какой нибудь диск F.. именно поэтому встала необходимость использовать относительный...
0
Эксперт .NET
 Аватар для Rius
13127 / 7688 / 1676
Регистрация: 25.05.2015
Сообщений: 23,458
Записей в блоге: 14
09.06.2015, 13:49
Именно по этой причине и нельзя использовать относительные пути.
А метод вычисления абсолютных я выше привёл.

Цитата Сообщение от Katbert Посмотреть сообщение
Но я не могу в таком приложении указывать на конкретное место
Правильно, не можете. Но вы под этим подразумеваете, даже если сами не осознаёте, так называемый hard coding - древний костыль программирования, когда исходные данные или переменные, типа путей к файлам данных, прописываются прямо в исходниках программы. Это иное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2015, 13:49
Помогаю со студенческими работами здесь

Отказано в доступе по пути
в asp.net средство администрирования веб-узла в разделе безопасность выдаёт ошибку помогите исправить Возникла проблема с...

Отказано в доступе по пути
Я прочитал кучу разных тем, но подходящего решения не нашел. Хочу поменять тэги mp3 файлов. string dir =...

Отказано в доступе по пути
При попытке скачать файл с ftp сервера выдает следующую ошибку :Необработанное исключение типа ...

Отказано в доступе по пути к папке
Здравствуйте, при написании программы для расчета размера возникли некоторые сложности, а именно, нет доступа к папке, вот код public...

Отказано в доступе по пути на удаление файла
Возникла проблема с правами на удаление jpg файлов из папки на рабочем столе, пишет "отказано в доступе по пути": string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru