Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / GetPrivateProfileStringW режет длинные строки / 4 сообщений из 4, страница 1 из 1
06.07.2016, 09:56
    #39268524
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileStringW режет длинные строки
Здравствуйте.

Появилась необходимость хранить длинные строки в 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
06.07.2016, 11:00
    #39268573
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileStringW режет длинные строки
Кажется, на чтение значений ключей ограничение 32767 байт. То есть, для Unicode длинна строки-буфера = 32767 / 2.
На запись ключей и запись/чтение секций ограничений нет.
Придется секцию читать и в топку ini-файлы.
...
Рейтинг: 0 / 0
06.07.2016, 11:52
    #39268648
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileStringW режет длинные строки
Да это пипец какой-то! При чтении всей секции (GetPrivateProfileSectionW), размер буфера действительно не ограничен и он используется весь, но вот каждый считанный ключ автоматом урезается до 16537 знаков. На выходе куча обрезанных ключей :(

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

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


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