Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual C++
Перезагрузить страницу Файлы проецируемые в память.
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Petrowert Petrowert вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.11.2015
По умолчанию Файлы проецируемые в память. - 14.11.2015, 07:26

cpp Код:
const LPCWSTR testfile = L"testfile.txt";

    LPCWSTR test1 = L"test simple text"; // Длина 16, вес  = 32
    SIZE_T size = _tcsclen(test1);
    //size++;
    SIZE_T size_in_bytes = sizeof(WCHAR)*size;
    std::cout << " String size: " << size << "\n";
    std::cout << " String size in bytes: " << size_in_bytes << "\n\n";

    HANDLE hFile = CreateFile(testfile, GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    SIZE_T size1 = GetFileSize(hFile, NULL);
    std::cout << " File size: " << size1 << "\n\n ";

    HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, NULL, size1 + size_in_bytes, NULL);

    LPCWSTR pvFile = (LPCWSTR)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, NULL, NULL, NULL);

    CopyMemory((LPVOID)(pvFile + size1), test1, size_in_bytes);

    // очищаем все перед завершением
    UnmapViewOfFile(pvFile);
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
Программа работает так.
Вычисляем длину строки test1 = "test simple text", потом вычисляем размер в байтах.
Если файла "testfile.txt" нет, то создается новый.
Вычисляем длину файла "testfile.txt".
Даем физ памяти размером длина файла + длина строки "test simple text" в байтах.
Далее получаем указатель pvFile и пишем в конец файла строку либо если файл новый, то в начало.
1 скрин. Собственно при первом запуске все прекрасно работает.

2 скрин. При втором запуске появляются нули равные длине строки. Хотя должна была добавиться строка в конец первой строки.

Что не так?
Миниатюры
1.jpg   2.jpg  
Ответить с цитированием
  (#2 (permalink)) Старый
wanja wanja вне форума
Member
 
Сообщений: 583
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 08.05.2005
По умолчанию 16.11.2015, 09:52

size1 - размер файла в байтах.
pvFile - указатель на строку двухбайтовых символов
pvFile+size1 увеличит указатель на 2*size1 байт
Ответить с цитированием
Пользователь сказал cпасибо:
Petrowert (24.01.2016)
  (#3 (permalink)) Старый
Petrowert Petrowert вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.11.2015
По умолчанию 24.01.2016, 16:03

Проблема решена.
Заменой строки
CopyMemory((LPVOID)(pvFile + size1), test1, size_in_bytes);
на
CopyMemory((LPVOID)((char*)pvFile + size1), test1, size_in_bytes);
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы, проецируемые в память gipesa Visual C++ 2 23.04.2014 13:51
Файлы hariton2058 Любые вопросы от новичков 4 24.12.2013 14:04
Файлы: Составить программу, которая перепишет фамилии в отдельные файлы в соответстви ghjk Задания за деньги 3 29.05.2013 19:42
Файлы Katty Maniako Pascal 0 31.01.2012 12:57
Оперативная память и память видеокарты AptypPM Периферия 14 12.01.2012 22:11
файлы LNK AnsweR_89 Любые вопросы от новичков 0 03.08.2011 20:13
ФАЙЛЫ (текстовые файлы) dianochka Pascal 0 25.04.2011 23:31
Материнская плата поддерживает память DDR 400, подойдет ли память другого типа? 71slan Любые вопросы от новичков 6 08.06.2010 01:56
Файлы imported_W_M Prolog 12 12.11.2008 23:12
файлы Lobo Компьютерная безопасность 20 26.06.2008 09:56
файлы AVS Операционная система Windows 2 21.06.2007 23:15
Можно ли создавать php-файлы, в которые вшиты другие файлы? feedbee PHP 6 04.12.2005 01:59



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов