Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/32: Рейтинг темы: голосов - 32, средняя оценка - 4.56
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123

Символ новой строки

16.08.2013, 18:16. Показов 7724. Ответов 95
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет) С маппировал текстовый файл в память.
C++
1
2
3
4
5
6
7
HANDLE file = CreateFile(fileNameWChar, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
DWORD fileSize = GetFileSize(file, NULL);
 
HANDLE fileMap =  CreateFileMapping(file, NULL, PAGE_READWRITE, 0, 0, NULL);
 
char *pvFileSrc = (char *)MapViewOfFile(fileMap, FILE_MAP_WRITE, 0, 0, fileSize);
если в файле строки находятся на разных строках
пример:
cyber
forum

То в указатели pvFileSrc будет сплошной текст (cyberforum).

Пробовал strstr(pvFleSrc, "\n"), strcmp(pvFleSrc, "\n"), ничего не выходит((

Пожалуйста, подскажите как определить строку.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2013, 18:16
Ответы с готовыми решениями:

Символ новой строки в MFC
При работе в MFC нужно вести протокол работы, то есть, сделали операцию a + b = c, записали в окно и т.д. Я создал Edit Control, с...

Std::cin, символ новой строки
Подскажите, куда в данном примере после каждого cin'а девается символ новой строки? Насколько помню cin и cin.get его после себя оставляют...

Зачем здесь символ новой строки?
Стивен Прата, Язык программирования С++, глава 7, пример 7 Никак не пойму, зачем здесь double temp; int i; for(i=0;...

95
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
17.08.2013, 20:07  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от castaway Посмотреть сообщение
А как ты проверяешь что там находится?
смотрю в деббагере с помощью визуализации текста.

То нормально, то некорректно содежит инфу.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
17.08.2013, 20:18
Ты смотришь в дебагере лишнюю информацию. У тебя есть размер файла. Не надо выходить за границы мэппированного массива.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 19:39  [ТС]
Я правильно понимаю? Размер маппированного файла должно быть меньше размера свободной памяти в ОЗУ?

Например, если свободно 100 мб, я не смогу с маппировать файл на 200 мб, да?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.08.2013, 19:55
Если файл смэппировать по каким-то причинам не получается, тогда одна из функций ( CreateFileMapping или MapViewOfFile ) должна вернуть ошибку.
А вообще я думаю что функционал ОС позволяет смэппировать файл, размер которого больше свободного размера ОЗУ, например подгружать ту часть файла к которой ты обращаешься.
К тому же, что мешает тебе это попробовать чтобы лично в этом убедится?
1
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:09  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Если файл смэппировать по каким-то причинам не получается, тогда одна из функций ( CreateFileMapping или MapViewOfFile ) должна вернуть ошибку.
А вообще я думаю что функционал ОС позволяет смэппировать файл, размер которого больше свободного размера ОЗУ, например подгружать ту часть файла к которой ты обращаешься.
К тому же, что мешает тебе это попробовать чтобы лично в этом убедится?
я пробую чуть меньше 1гб маппирует. а уже 1.5 нет( .
функция getlasterror выдала ошибку №8. это, вроде как, недостаточно место.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.08.2013, 20:15
Цитата Сообщение от vodilawofer Посмотреть сообщение
я пробую чуть меньше 1гб маппирует. а уже 1.5 нет( .
А свободной памяти при этом сколько?

На днях обсуждалась тема, там парень аналог ArtMoney писал, так вот там есть пример того как мэппировать файл по частям с помощью функции VirtualQueryEx, только его нужно немного довести до ума..
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:19  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
А свободной памяти при этом сколько?

На днях обсуждалась тема, там парень аналог ArtMoney писал, так вот там есть пример того как мэппировать файл по частям с помощью функции VirtualQueryEx, только его нужно немного довести до ума..
примерно меньше 1 гб.
а ссылочку не подкинете? или в каком разделе искать.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.08.2013, 20:21
Хотя нет, вру, там немного другое было. В общем не суть. Если не хватает ОЗУ - просто мэппируй файл по частям. Функция MapViewOfFile позволяет это делать.

Добавлено через 1 минуту
Кстати, какая функция возвращает ошибку?
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:23  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Хотя нет, вру, там немного другое было. В общем не суть. Если не хватает ОЗУ - просто мэппируй файл по частям. Функция MapViewOfFile позволяет это делать.

Добавлено через 1 минуту
Кстати, какая функция возвращает ошибку?
ф-ция:GetLastError()

по частям это, наверно, трудоемко
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.08.2013, 20:25
Цитата Сообщение от vodilawofer Посмотреть сообщение
ф-ция:GetLastError()
Перед GetLastError еще какая-то функция возвращает ошибку?

Цитата Сообщение от vodilawofer Посмотреть сообщение
по частям это, наверно, трудоемко
Да, код надо будет переработать, но других выходов из ситуации я не вижу.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:27  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Перед GetLastError еще какая-то функция возвращает ошибку?

Да, код надо будет переработать, но других выходов из ситуации я не вижу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
pvFileSrc = (char *)MapViewOfFile(fileMap, FILE_MAP_WRITE, 0, 0, fileSize);
    
    CloseHandle(fileMap);
 
    ptrStrEnd = pvFileSrc + fileSize;
    
    if(!pvFileSrc)
    {
        printf("ERROR mapping file");
        [B]printf("%d", GetLastError());[/B]
        return 1;
    }
в принципе, нет.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.08.2013, 20:34
Цитата Сообщение от vodilawofer Посмотреть сообщение
в принципе, нет.
Во-первых, MapViewOfFile возвращает 0. Что говорит об ошибке вызова этой функции. Что я и хотел узнать.
Во-вторых, я бы не был так уверен что хэндл файла можно закрыть сразу после мэппирования, в документации не сказано что так можно делать.
1
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:35  [ТС]
"Во-вторых, я бы не был так уверен что хэндл файла можно закрыть сразу после мэппирования, в документации не сказано что так можно делать."
у меня с этим проблем не было.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.08.2013, 20:39
Цитата Сообщение от vodilawofer Посмотреть сообщение
у меня с этим проблем не было.
Далеко не факт что не будет в дальнейшем или на разных версиях ОС.

Не по теме:

Смысл моих советов теряется если ты к ним не прислушиваешься.

0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:49  [ТС]
у меня 2 handle от createfile и от MapViewOfFile их оба закрывать по окончанию работы программы?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.08.2013, 20:55
Закрывай их когда захочешь, только в обратном порядке: UnmapViewOfFile( pvFileSrc ), CloseHandle( fileMap ), CloseHandle( file ).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.08.2013, 20:55

Ошибка: символ новой строки в потоке
После того как указываю 1 пункт (к-ство квартир),то мне выбивает сразу 2 и 3,а не поочередно,подскажите где я ошибся? #include...

Отбрасывает ли std::cin символ новой строки?
Здравствуйте. Есть следующий код (это задача из книги Праты): #include <iostream> const unsigned short strsize = 100; struct sBop ...

Как убрать символ новой строки, применяя перегруженный оператор <<?
Друзья! Ну то есть формируются строки хитрым способом (не вручную, лучше не углубляться в это) Потом получаю вектор этих строк. Надо...

Будет ли добавлен символ новой строки при ошибочном вводе?
После того, как пользователь введет число и нажмеn enter в поток будет передан символ новой строки '\n'. Будет ли добавлен символ новой...

Ввести символьную строку. Распечатать каждый символ массива с новой строки
Ввести символьную строку. Распечатать каждый символ массива с новой строки.


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

Или воспользуйтесь поиском по форуму:
96
Ответ Создать тему
Новые блоги и статьи
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
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-модели) микоризной сукцессии: пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru