Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# .NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
BAKER3
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 18
#1

Работа с ini файлом: как получить все секции - C#

18.05.2012, 18:49. Просмотров 1962. Ответов 2
Метки нет (Все метки)

Проблема в следующем:

Нашел api для работы с ini, нашел нужные мне функции:
GetPrivateProfileSectionNames - получить имена всех секций в файле
GetPrivateProfileString - получить ключ параметра
WritePrivateProfileString - записать ключ параметра в указанную секцию

Сам ini файл:

Код
[win7]
name=xxx
[linux]
name=yyy

Код:

Описал их.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ini
    {
        [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
        public static extern int GetPrivateProfileString(String sSection, String sKey, String sDefault,
            String sString, int iSize, String sFile);
        [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
        public static extern bool WritePrivateProfileString(String sSection, String sKey, String sString, String sFile);
        [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
        public static extern int GetPrivateProfileSectionNames(String lpszReturnBuffer, int nSize, String lpFileName);
    }
private void button1_Click(object sender, EventArgs e)
{
string  buffer = "";
            int read = ini.GetPrivateProfileSectionNames(buffer, 1024,@"D:\sys.ini");
            MessageBox.Show(buffer);
}
Сообщение выдается с названием первой секции т.е. WIN7
Как получить все секции. Читал, что в буфере должно хранится название всех секции разделенных /0
Но и split ничего не дает возвращает win7 (название первой секции)
Пожалуйста помогите.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 18:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с ini файлом: как получить все секции (C#):

Работа с dds файлами: получить анимированное изображение, достав из этого файлы все его части - C#
Есть dds файл, в неё 160 маленьких изображений. К нему идет описание типа: 0 4 "01微笑" 66 72 78 84 Где 0 - номер начального...

.NET 4.x Работа с ini фалйами - C#
Ребят, подскажите пожалуйста, есть ли в C# возможность использования для ini файлов? Если нет, то подскажите как можно осуществлять...

.NET 4.x Получить полные права над файлом - C#
Есть файл где-то в systemdit . У него владелец trustedinstaller . Как мне изменить в нём байты? Через стрим райдер открыть файл не могу,...

c#/с++ работа с файлом - C#
уважаемые программисты, помогите пожалуйста,подскажите как такая работа с файлом будет выглядеть на C#??? у меня есть данные такого типа ...

Работа с файлом - C#
Добрый Вечер! Уважаемые!! У меня проблема: У меня есть массив string который берёт все значения из .doc файла он примерно следующий: ...

Работа с файлом в потоке - C#
Приветствую! Пытаюсь перегнать xml файл из потока в массив байтов TextReader reader = new StreamReader(streamwithxml); ...

2
Alex_Sabaka
624 / 485 / 10
Регистрация: 28.07.2010
Сообщений: 895
Завершенные тесты: 3
18.05.2012, 20:09 #2
Смотрим пример кода на PInvoke.net.
Если сами еще не догадались почему ваш код не работает, то смотрите по кат
Во-первых, при инициализации переменной buffer вы ей дали значение пустой строки, т.е. размер буфера 0(или один если учитывать нул-чар);
во-вторых, из за того что размер буфера 0, ф-ции GetPrivateProfileSectionNames просто-напросто некуда писать информацию;
в-третьих(в этом я не уверен), даже б, если размер буфера был достаточен для чтения, то она бы всеравно получила имя первой секции, остальные были бы невидны, т.к. имена остальных секций находятся после нул-чара, который означает конец строки
1
BAKER3
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 18
18.05.2012, 20:50  [ТС] #3
Цитата Сообщение от Alex Sabaka Посмотреть сообщение
Смотрим пример кода на PInvoke.net.
Если сами еще не догадались почему ваш код не работает, то смотрите по кат
Во-первых, при инициализации переменной buffer вы ей дали значение пустой строки, т.е. размер буфера 0(или один если учитывать нул-чар);
во-вторых, из за того что размер буфера 0, ф-ции GetPrivateProfileSectionNames просто-напросто некуда писать информацию;
в-третьих(в этом я не уверен), даже б, если размер буфера был достаточен для чтения, то она бы всеравно получила имя первой секции, остальные были бы невидны, т.к. имена остальных секций находятся после нул-чара, который означает конец строки
Спасибо за пояснение. Попробовал пример.
Там получается, что функция возвращает массив символов.

к примеру

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
public string[] SectionNames()
        {
            string dir = @"D:\sys.ini";
            uint MAX_BUFFER = 32767;
            IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER);
            uint bytesReturned = win32.GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, dir);
            if (bytesReturned == 0)
            {
                Marshal.FreeCoTaskMem(pReturnedString);
                return null;
            }
            string local = Marshal.PtrToStringAnsi(pReturnedString,(int)bytesReturned);
            Marshal.FreeCoTaskMem(pReturnedString);
            //use of Substring below removes terminating null for split
            return local.Substring(0, local.Length - 1).Split('\0');
        }
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            string[] word=SectionNames();
 
            MessageBox.Show(word[0]);
        }
получается word[0]=w
word[1]=i
word[2]=n
word[3]=7
и.т.д

Но теперь все секции работают. Пробовал убрать разделение, но все равно из буфера выдается 1 символ.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2012, 20:50
Привет! Вот еще темы с ответами:

Работа с текстовым файлом - C#
записываю через StreamWriter данные в текстовый файл (одно слово в каждую строчку) как сделать так чтобы при следующем открытии файла...

.NET 3.x Работа с txt файлом! - C#
Всем Привет... Очень нужна Ваша помощь или совет, как до реализовать метод.. Суть такова.. У меня есть форма и пару перехватчиков...

Работа с файлом Excel - C#
Здравствуйте! Есть файл с таблицами Excel. Подскажите, как мне получить доступ к его ячейкам? Мне нужно по нему считать статистику.

Работа с текстовым файлом - C#
В той теме решил не флудить более, а создать свою. Вопрос вот в чем: как узнать, существует ли файл в данной папке? Пример: я хочу...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru