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

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

16.08.2013, 18:16. Показов 8644. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №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
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (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, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru