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

Перезапись hidden файла в C:\Program Files

18.07.2016, 18:41. Показов 1647. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!

Разрабатываю программу, которая будет хранить настройки в отдельном файле, (делаю его скрытым и системным дабы у юзверя не возникло желания удалить его), этот файл должен будет перезаписываться из программы.

Код (это модель, но делает тоже самое):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.IO;
 
namespace FilePerm
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"C:\Program Files\file.txt";
 
            FileInfo file = new FileInfo(path);
 
            //создание файла впервые
 
            using (StreamWriter sW = new StreamWriter(path))
            {
                sW.WriteLine("привет");
            }
 
            file.Attributes = FileAttributes.Hidden | FileAttributes.System;
 
            //перезапись созданного файла
 
            using (StreamWriter sW = new StreamWriter(path))
            {
                sW.WriteLine("пока");
            }
        }
    }
}
Проблема в следующем: при попытке перезаписать возникает System.UnauthorizedAccessException и я с ним не могу справиться. Пробовал применять атрибуты и т.д., но видимо что-то делаю не правильно.

Огромная просьба: напишите пожалуйста код котрый сможет это реализовать!

Заранее благодарю!
Вложения
Тип файла: zip Program.zip (487 байт, 2 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2016, 18:41
Ответы с готовыми решениями:

Как получить пути к папкам Program files и Program files x86?
По msdn код должен быть таким. (У меня разрядность системы x64, если что) string...

Сохранить файл в Program files
Друзья, выручайте. Нужно сохранять файлы в папку программы: C:\Program Files...

Создание папки в Program Files (x86)
Создаю папку по пути "C:\\Program Files (x86)\\Folder" (на системном диске) Но она не создается...

Доступ для записи в файл, находящийся в Program Files
Всем привет. Пытаюсь отредактировать файл, который находится в Program Files, но получаю ошибку...

6
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
18.07.2016, 19:16 2
hexkod,
C#
1
2
3
4
5
6
7
//перезапись созданного файла
 
using (StreamWriter sW = new StreamWriter(File.OpenWrite(path)))
{
    sW.BaseStream.SetLength(0);
    sW.WriteLine("пока");
}
P.S. Хранить перезаписываемые настройки в папке Program Files плохая идея. Лучше в профиле пользователя. Большинство пользователей не знает о существовании этой папки.
1
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 11
19.07.2016, 00:21  [ТС] 3
Спасибо! Помогло, создал файл в C:\ProgramData (он в папке с названием программы).

Также, конечно, было бы интересно узнать, как справить с атрибутами доступа, и сделать так, чтобы появлялось всплывающее окно винды (как при установки или внесении изменений программой), запрашивающее разрешение на дальнейшие действия.
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
19.07.2016, 05:26 4
Лучший ответ Сообщение было отмечено hexkod как решение

Решение

Цитата Сообщение от hexkod Посмотреть сообщение
(делаю его скрытым и системным дабы у юзверя не возникло желания удалить его
Это совсем ни к чему. Создайте не текстовый файл с настройками, а, к примеру, пусть в программе будет класс-синглет для настроек. При закрытии сериализуйте его в бинарном формате на диск, а при загрузке-десериализуйте. Естественно, при загрузке проверка на корректность, если файл был поврежден - все настройки сбрасываются по дефолту. Так намного проще (и правильнее, ятд).
1
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 11
19.07.2016, 14:06  [ТС] 5
Сделал с помощью сериализации и класса-синглета, отлично работает! Огромное вам спасибо!

Скажите пожалуйста, где лучше хранить settings.dat (файл с настройками) и стоит ли присваивать ему какие-то атрибуты (FileAttributes.Hidden, FileAttributes.System) на компьютере пользователя? (сейчас он лежит в папке с проектом, т.к. это макет)
Вложения
Тип файла: zip ProgramOptions.zip (80.2 Кб, 3 просмотров)
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
19.07.2016, 17:16 6
Цитата Сообщение от hexkod Посмотреть сообщение
где лучше хранить settings.dat (файл с настройками)
Я бы не заморачивался и хранил в папке с приложением, задав в коде корректный путь к файлу, типа того:
string settingsPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings.dat");
1
0 / 0 / 0
Регистрация: 06.12.2015
Сообщений: 11
19.07.2016, 22:25  [ТС] 7
Благодарю за помощь!
0
19.07.2016, 22:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2016, 22:25
Помогаю со студенческими работами здесь

Как записать ini файл в подпапку Program Files
Как программно получить права администратора в Win7 для того, чтобы в любой момент времени можно...

Win7 не дает доступ к файлам программы в папке Program Files
Столкнулась с такой проблемой. вариант "Изначально открыть доступ" не прокатывает.

Win7 не дает доступ к файлам программы в папке Program Files
Может не совсем в нужной ветке вопрос, но проблема такая: Программа при работе использует некий...

Программа тормозит в папке Program Files
Добрый день. Не смог найти ответ на этот вопрос. Прошу помощи. Написал приложение. Работает с БД...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru