Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/120: Рейтинг темы: голосов - 120, средняя оценка - 4.50
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77

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

07.06.2015, 08:16. Показов 23773. Ответов 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
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,051
Записей в блоге: 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
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,051
Записей в блоге: 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
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,051
Записей в блоге: 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
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,051
Записей в блоге: 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
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,051
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru