powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / GetPrivateProfileStringW режет длинные строки
4 сообщений из 4, страница 1 из 1
GetPrivateProfileStringW режет длинные строки
    #39268524
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Появилась необходимость хранить длинные строки в ini-файле. WritePrivateProfileStringW пишет отлично, без потерь. А вот при чтении GetPrivateProfileStringW, строку обрезает до 16538 символов, независимо от размера буфера. В чем может быть причина?

Word 2013 64 + Win7 64

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#If Win64 Then
    Private Declare PtrSafe Function GetPPString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
        ByVal lpAppName As LongPtr, _
        ByVal lpKeyName As LongPtr, _
        ByVal lpDefault As LongPtr, _
        ByVal lpReturnedString As LongPtr, _
        ByVal nSize As LongLong, _
        ByVal lpFile As LongPtr) As Long
...
#End If
...
Dim sBuffer As String, nBufferSize As Long
    nBufferSize = размер_файла
    sBuffer = String$(nBufferSize - 1, Chr$(0))
    nResult = GetPPString(StrPtr(sSection), StrPtr(sKey), StrPtr(""), StrPtr(sBuffer), nBufferSize - 1, StrPtr(имя_файла))
    sValue = Left$(sBuffer, nResult)
...
...
Рейтинг: 0 / 0
GetPrivateProfileStringW режет длинные строки
    #39268573
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется, на чтение значений ключей ограничение 32767 байт. То есть, для Unicode длинна строки-буфера = 32767 / 2.
На запись ключей и запись/чтение секций ограничений нет.
Придется секцию читать и в топку ini-файлы.
...
Рейтинг: 0 / 0
GetPrivateProfileStringW режет длинные строки
    #39268648
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это пипец какой-то! При чтении всей секции (GetPrivateProfileSectionW), размер буфера действительно не ограничен и он используется весь, но вот каждый считанный ключ автоматом урезается до 16537 знаков. На выходе куча обрезанных ключей :(

Светит переход на xml-файлы.
...
Рейтинг: 0 / 0
GetPrivateProfileStringW режет длинные строки
    #39269209
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что-то совсем странное. Длинна считанного значения (ключ=значение), с помощью функций GetPrivateProfileString и GetPrivateProfileSection, скачет каким-то случайным образом, в зависимости от длины значения, хранящегося в ini-файле. Речь о длинных значениях. Загнал для теста строки длинной 40000, 50000, 60000, 70000, 80000 знаков, так считало 7234, 17234, 27234, 4466 знаков соответственно. Никакой ошибки не выдает.

Может что с функцией напутал? Код используется давно и с короткими строками никогда проблем не было.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / GetPrivateProfileStringW режет длинные строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]