Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840

Как правильно открыть TXT файл для чтения, например чтобы запихнуть в TextBox или просто загрузить в массив строк

17.09.2023, 18:23. Показов 3948. Ответов 82
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я ещё раньше не занимался этим вопросом с помощью API-функций, так как всегда работал с помощью стандартных методов VB6. А теперь, поняв фундаментальный недостаток VB6-метода (отсутствие поддержки юникода в именах файлов), я хочу научиться открывать/загружать стандартный текстовый файл с помощью API.

Итак, за это отвечает у нас функция ReadFile, но уважаемый The Trick, я посмотрел, загружает файлы каким-то странным, другим способом, через функции CreateFileMapping и MapViewOfFile, я если честно в этом ничего не понимаю. Смотрел описание этих функций так толком и не понял зачем их использовать вместо стандартного ReadFile.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2023, 18:23
Ответы с готовыми решениями:

GDI+ как освободить файл или открыть только для чтения
Добрый день! Занимаюсь написанием своего графического редактора на ассемблере. Последняя версия http://esm.ho.ua/Automat.html Нужна...

Как открыть доступ для чтения файла 'output.txt'?
Пример: program Project2; {$APPTYPE CONSOLE} uses SysUtils; var f1,f2:Text;

Как поток чтения (или записи) запихнуть в класс?
Здравствуйте!!! Ребят, подскажите пожалуйста, собственно, как запихнуть в класс поток ifstream? Че-то я озадачен оказался *-) Без...

82
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
24.09.2023, 22:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от HackerVlad Посмотреть сообщение
Теперь правильно?
Проще просто сделать:

Visual Basic
1
2
3
4
5
6
7
                If MidB$(stringbuffer, 1, 3) = ChrW(&HBBEF) & ChrB(&HBF) Then ' Если есть запись BOM
                    lpMultiByteStr = StrPtr(stringbuffer) + 3
                    numread = numread - 3
                    IsBOM = True
                Else
                    lpMultiByteStr = StrPtr(stringbuffer)
                End If
Повторюсь я бы вообще не делал Mid$ и проверял всегда размеры, впрочем у меня как раз проверяется. Какой смысл проверять BOM если размер файла меньше 3 байт?
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
25.09.2023, 01:13  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
если размер файла меньше 3 байт?
У меня в 99% случаев не меньше трёх байт. Поэтому я не проверяю.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
25.09.2023, 09:06  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Проще просто сделать:
А ну тогда и переменная IsBOM вообще не нужна значит.

Добавлено через 3 минуты
Теперь всё правильно

Visual Basic
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
31
32
33
34
35
Public Function ReadFromTextFileUTF8(ByVal FileName As String) As String
    Dim hFile As Long
    Dim stringbuffer As String
    Dim numread As Long
    Dim FileSize As Long
    Dim nOutputCharLen As Long
    Dim lpMultiByteStr As Long
    
    hFile = CreateFile(StrPtr(FileName), GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
    
    If hFile <> INVALID_HANDLE_VALUE Then
        FileSize = GetFileSize(hFile, ByVal 0&) ' Этот метод только до 2Гб
        
        If FileSize > 0 Then
            PutMem4 VarPtr(stringbuffer), SysAllocStringByteLen(0&, FileSize) ' Мгновенно выделить память для строки
            
            If ReadFile(hFile, StrPtr(stringbuffer), FileSize, numread, ByVal 0&) > 0 Then
                If MidB$(stringbuffer, 1, 3) = ChrW(&HBBEF) & ChrB(&HBF) Then ' Если есть запись BOM
                    lpMultiByteStr = StrPtr(stringbuffer) + 3
                    numread = numread - 3
                Else
                    lpMultiByteStr = StrPtr(stringbuffer)
                End If
                
                nOutputCharLen = MultiByteToWideChar(CP_UTF8, 0&, lpMultiByteStr, numread, 0&, 0&)
                If nOutputCharLen > 0 Then
                    PutMem4 VarPtr(ReadFromTextFileUTF8), SysAllocStringLen(0&, nOutputCharLen)
                    MultiByteToWideChar CP_UTF8, 0&, lpMultiByteStr, numread, StrPtr(ReadFromTextFileUTF8), nOutputCharLen ' Преобразовать кодировки
                End If
            End If
        End If
        
        CloseHandle hFile
    End If
End Function
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.09.2023, 09:06

Открыть файл и загрузить содержимое в TextBox
Доброго времени суток! Ребят помогите справиться с задачей есть код по открытие файла private void toolStripMenuItem2_Click(object...

Как расшифровать файл dat или просто открыть его и вывести на экран
Мне нужно открыть файл с расширением dat и вывести на экран Как это сделать, дайте пожалуйста примерный код

Открыть для записи текстовый файл data.txt и записать в него полученный массив, закрыть файл
Составить программу с подпрограммами для выполнения следующего алгоритма (предусмотреть процедуры записи и чтения информации из файла). ...

Как открыть файл для чтения?
некоторый дивайс пишет данные в текстовый файл , мне нужно не прерывая и не мешая дивайсу прочитать этот файл делаю так var ...

Файл: Как можно открыть файл txt и занести из него данные в массив?
как можно открыть файл txt и занести из него данные в массив, а после из этого массива вывести в выпадающий список значения? заранее...


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

Или воспользуйтесь поиском по форуму:
83
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru