|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
Как правильно открыть TXT файл для чтения, например чтобы запихнуть в TextBox или просто загрузить в массив строк17.09.2023, 18:23. Показов 3363. Ответов 82
Метки нет (Все метки)
Я ещё раньше не занимался этим вопросом с помощью API-функций, так как всегда работал с помощью стандартных методов VB6. А теперь, поняв фундаментальный недостаток VB6-метода (отсутствие поддержки юникода в именах файлов), я хочу научиться открывать/загружать стандартный текстовый файл с помощью API.
Итак, за это отвечает у нас функция ReadFile, но уважаемый The Trick, я посмотрел, загружает файлы каким-то странным, другим способом, через функции CreateFileMapping и MapViewOfFile, я если честно в этом ничего не понимаю. Смотрел описание этих функций так толком и не понял зачем их использовать вместо стандартного ReadFile.
0
|
|
| 17.09.2023, 18:23 | |
|
Ответы с готовыми решениями:
82
GDI+ как освободить файл или открыть только для чтения Как открыть доступ для чтения файла 'output.txt'? Как поток чтения (или записи) запихнуть в класс? |
|
Модератор
|
|||||||
| 21.09.2023, 21:13 | |||||||
Сообщение было отмечено HackerVlad как решение
Решение
, а вот через массивы:
1
|
|||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 21.09.2023, 23:11 [ТС] | ||||||
|
The trick, спасибо большое за труды, но ты забыл скопировать декларации и например я даже не знаю как объявлять структуру SAFEARRAY, вообще никогда с этим не работал.
Добавлено через 2 минуты В твоих других кодах я пока нашёл только структуру SafeArray1d просто SafeArray пока нигде не нашёл ещё Добавлено через 3 минуты Я смотрю много твоих других примеров и везде встречаю только SAFEARRAYBOUND и SAFEARRAY1D структуры. SAFEARRAY просто пока нигде не могу найти. Добавлено через 2 минуты Ну ты и задал мне задачку. Нигде не могу найти структуру SAFEARRAY просто. SAFEARRAY1D есть только у тебя. SAFEARRAY2D в апи вьювере. Добавлено через 37 секунд Может это одно и тоже? Добавлено через 1 минуту Предположу что это одно и тоже, спустя 10 минут безуспешных поисков... Добавлено через 7 минут Ну наконец-то я ели нарыл всё недостающее. В итоге я НЕ почувствовал разницы в скорости в сравнении с моим методом со строкой. Но теперь твой массив зато стал работать так же быстро как и в случае со строкой. Полный код:
The trick, в итоге: кода гораздо больше нужно писать, а разницы в скорости НЕТУ!!!
0
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||
| 21.09.2023, 23:45 [ТС] | |||
|
Разозлившись, сейчас буду тестировать аж целых 500 Мб на загрузку, чтобы проверить а есть ли всё же хоть какая-то разница в скорости.
Добавлено через 1 минуту На 500 Мб у меня не хватает памяти) Пхахаххаах, разбежался блин пхахахах Добавлено через 2 минуты The trick, кстати ты говорил мол я не делаю проверок на случай если памяти не хватит. Вот я решил загрузить 500 Мб, памяти не хватило и ничего не произошло. Краха программы не случилось. Просто вернуло пустую строку. Добавлено через 1 минуту Так что получается проверку делать не обязательно. Добавлено через 5 минут The trick, на 10-20 млск меньше времени твой способ, при максимальном 450 Мб файле что я только могу загрузить, на 500 у меня уже оперативки не хватает просто Добавлено через 51 секунду Добавлено через 2 минуты Ну вот как бы ты не хаил мой способ со строкой, а он не медленнее чем твой. А ты пытался доказать что он медленнее. Добавлено через 9 минут Добавлено через 6 минут The trick, так что ты меня извини пожалуйста, ноя не вижу смысла переходить на твою технологию, я нормально написал функцию изначально загружая в строку. по крайне мере кода писать нужно гораздо меньше. скорость одинаковая.
0
|
|||
|
Модератор
|
|||
| 22.09.2023, 12:44 | |||
|
1
|
|||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 22.09.2023, 17:24 [ТС] | |
|
testuser2, с UTF-8 форматом Integer не проканает, только с UTF16
Добавлено через 42 секунды testuser2, там просто на один сивол может быть то один байт, то два байта фиг поймешь Добавлено через 1 минуту The Trick меня короче не убедил, весь день переписывал свои коды, смотрел скорости - всё зря, мой код со стркоами вполне оптимален Добавлено через 11 минут Как буд-то я файл по 100 тысяч раз загружаю, можно подумать Добавлено через 8 секунд Провёл очень много тестов Добавлено через 10 секунд The Trick не убедил ни скольео
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 23.09.2023, 15:16 [ТС] | |
|
Тем ни менее, хоть я и не очень согласен с The Trick, но тем ни менее моя тема называется как правильно открыть TXT файл. Поэтому я помечу ответ The Trick как решение, потому что у него чуть более правильный вариант, чем у меня, и на 10 млск быстрее. На этом тему мы закончили, я думаю.
0
|
|
| 23.09.2023, 17:26 | |
|
В любом случае это быстрые методы. Кстати, сейчас проверил, буфер строки можно расширять с помощью HeapRealloc, так же как и массив. Только после этого надо менять заголовочный указатель у строки на новый.
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 24.09.2023, 19:53 [ТС] | ||||||
|
Придётся вернуться к этой теме снова, так как я обнаружил ошибку в своей функции ReadFromTextFileUTF8. Если в загружаемом файле есть запись BOM то функция загружала на 3 байта больше чем нужно. Эту ошибку я исправил:
0
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 24.09.2023, 21:39 [ТС] | ||
|
Добавлено через 1 минуту Да вроде FileSize надо. Что не так? Добавлено через 47 секунд Заранее я ведь не знаю будущий размер буфера, поэтому я тебя не понимаю.
0
|
||
|
Модератор
|
||
| 24.09.2023, 21:42 | ||
|
Во-вторых, когда ты делаешь lpMultiByteStr = StrPtr(stringbuffer) + 3 то размер у тебя соответственно уменьшается.
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 24.09.2023, 21:52 [ТС] | |
|
The trick, то есть надо написать либо FileSize -3 либо numread или numread -3?
Добавлено через 1 минуту может numread просто? без -3
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 24.09.2023, 21:55 [ТС] | ||||||
|
numread просто надо, без -3
с -3 уже не работает код падает Добавлено через 28 секунд Для узнавания буфера (первый вызов функции):
0
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 24.09.2023, 21:57 [ТС] | |
|
Поменял FileSize на numread
Добавлено через 2 минуты Правильно ли я тебя понимаю что ты предлагаешь мне в SysAllocStringLen не отризать 3 символа, как я это сделал, а отрезать в другом месте
0
|
|
|
Модератор
|
|
| 24.09.2023, 21:59 | |
|
HackerVlad, вот ты узнал размер файла, к примеру 30 байт. Ок. Смотришь первый BOM (если файл больше или равен 3 байтам). Если BOM присутствует то ты пропускаешь его при конверсии в UTF-16, правильно? Правильно. Ты так и делаешь, но передаешь что в функцию MultiByteToWideChar те же 30 байт. Вопрос - что получит функция если у тебя буфер в 30 байт, ты пропускаешь первые 3 и просишь ее конвертировать 30 (!) байт? Правильно - чтение за пределом буфера и неверный результат преобразования.
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 24.09.2023, 22:00 [ТС] | ||||||
|
Проверяй мои исправления:
Добавлено через 1 минуту Я работаю только с UTF8.
0
|
||||||
| 24.09.2023, 22:00 | |
|
Открыть файл и загрузить содержимое в TextBox Как расшифровать файл dat или просто открыть его и вывести на экран Открыть для записи текстовый файл data.txt и записать в него полученный массив, закрыть файл Как открыть файл для чтения?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии
Введение
Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
|
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np
class PlantAgent:
def __init__(self, name, strategy, initial_biomass):
self. name = name
self. strategy = strategy # "greedy" (широколиственные) или. . .
|