Доступ к ini-файлу из документов для чтения

Я поместил конфигурационный ini-файл "config.ini" для чтения и записи из моей программы на С#, дело в том, что если у пользователя включен UAC, то по каким-то странным причинам программа не читает и не пишет в файл, но он удалось создать файл, но он не может читать или писать в него.

Как я могу заставить это работать.

этот файл сохраняется в DOCUMENTSFOLDER\ProductName\config.ini

Файл класса Ini: http://www.sinvise.net/so/Ini.cs

Фрагмент кода создания config.ini: http://www.sinvise.net/so/creation.txt


person Sandeep Bansal    schedule 24.01.2010    source источник
comment
Можете ли вы приложить некоторый код для нас, SO'ers, чтобы увидеть, что/как/почему/когда/где это происходит не так?   -  person t0mm13b    schedule 24.01.2010
comment
добавил два файла, обновил в вопросе   -  person Sandeep Bansal    schedule 24.01.2010


Ответы (2)


Быстрое предложение, прежде чем идти дальше, вы должны проверить nini, который является аккуратным обработчиком INI и заботится о чтение/запись файлов INI.

Пример использования кода, считывающего файл ini.

using Nini;
using Nini.Config;

namespace niniDemo{
   public class niniDemoClass{
       public bool LoadIni(){
            string configFileName = "demo.ini";
            IniConfigSource configSource = new IniConfigSource(configFileName);

            IConfig demoConfigSection = configSource.Configs["Demo"];
            string demoVal = demoConfigSection.Get("demoVal", string.Empty);
       }
   }

}

Попробуй и возьми оттуда...

Надеюсь, это поможет. С уважением, Том.

person t0mm13b    schedule 24.01.2010
comment
Я перекодирую свой проект на nini, надеюсь, это решит мои проблемы. - person Sandeep Bansal; 24.01.2010
comment
Отлично сработало! Большое спасибо, вы спасли меня от головокружения! - person Sandeep Bansal; 24.01.2010
comment
@Sandeep: Отличный материал! Рад помочь! :) - person t0mm13b; 24.01.2010

Вам должно повезти при записи по пути: Environment.SpecialFolder.LocalApplicationData. Ваше приложение должно иметь разрешение на запись в него с включенным или выключенным UAC или даже на машинах, где приложение/пользователь имеет очень ограниченные разрешения.

person Andy Jacobs    schedule 24.01.2010
comment
Я только что попробовал: string iniPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + \\Product\\config.ini; И это не идет, он не читает данные. - person Sandeep Bansal; 24.01.2010
comment
Успешно ли программа записала туда файл (если я не понял, это не папка с документами, а лучшая папка для файлов INI)? - person Andy Jacobs; 24.01.2010
comment
Да, это было со всеми данными, но я не читал их, я использую класс Ini для получения значений из этого файла. Источник класса находится в моих вопросах. Я уже использовал DOCUMENTSFOLDER и ранее общую папку данных приложений, но все еще не пошел, я считаю, что это может быть что-то с классом Ini - person Sandeep Bansal; 24.01.2010
comment
Кроме того, я забыл, заканчивается ли LocalApplicationData обратной косой чертой или нет, что может быть проблемой. В любом случае лучше использовать Path.Combine, который обрабатывает оба случая. Например, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Product\\config.ini); - person Andy Jacobs; 24.01.2010
comment
Можете ли вы более конкретно рассказать о том, как чтение терпит неудачу. Например, генерирует ли он исключение (и если да, то какое исключение), или не жалуется, но не видит никаких данных в файле, или утверждает, что файл не существует и т. д.? - person Andy Jacobs; 24.01.2010
comment
У меня есть if(GetInival(....) == 1) { checkboxName.checked = true; } --- Значение 1 в config.ini, и все работает с отключенным UAC, но флажок не установлен, когда UAC включен. - person Sandeep Bansal; 24.01.2010