Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/64: Рейтинг темы: голосов - 64, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13

Взять текстовый файл в проект

04.11.2013, 16:29. Показов 12471. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Имеется простенький проект на Visual C++, после компиляции получается один exe-файл (skey.exe) и оперирует он с текстовым файлом (keys.txt) который лежит рядом с ним. Теперь (ввиду того, что конечный пользователь боится потерять skey.txt при копировании, а он уникален и очень важны данные в нем) необходимо чтобы этот файл был скомпилирован вместе с проектом и доступа к нему никто не имел. Можно ли это как-то сделать, но чтобы работа с файлом в проекте осталась такой же, как и с внешним файлом? Если нельзя, то как можно поступить? Из файла информация только считывается.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2013, 16:29
Ответы с готовыми решениями:

Добавить текстовый файл в проект
Как можно добавить текстовый файл в проект? Чтобы он был встроен в jar

Добавить текстовый файл в проект
Подключил к проекту текстовый файл. Вопрос: как в процессе работы программы редактировать/сохранить его содержимое?

Взять из текстового файла данные, прочитать их и вывести ответ в другой текстовый файл
как взять из текстового файла данные, прочитать их и вывести ответ в другой текстовый файл var s,f:text; a,b,c,d:integer; begin ...

23
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
04.11.2013, 16:53
Включи его в ресурсы проекта. А в самой программе считывай этот ресурс. Вуаля.
0
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
04.11.2013, 16:57  [ТС]
Я уже так сделал, в ресурс включил, а как в программе считывать его? Я тупо пытаюсь по имени файла - не получается =/
0
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
05.11.2013, 20:27  [ТС]
Простите за подъем темы, но если все так просто, почему никто не поможет?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.11.2013, 20:40
Добавьте файл в ресурсы.
Это можно сделать как с помощью визардов Visual Studio, так и
вручную, добавив необходимые строчки в файл rc.
Ну а дальше - FindResource, SizeOfResource, LoadResource, LockResource.
И получаете указатель на буфер с данными ресурса, а также его длину.
1
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
13.11.2013, 18:59  [ТС]
Убежденный, мм, что-то нифига не доходит. Может быть поможете примером? Просто чтение из текстового файла из консольного приложения.
P.S. Блин, забыл сразу сказать, что приложение консольное!
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
13.11.2013, 20:33
Работа с файлами ресурсов (MSDN)
http://msdn.microsoft.com/ru-r... s.90).aspx
0
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
17.11.2013, 20:46  [ТС]
Убежденный, подцепил ресурс, кастомный тип указал как "txt". В окне свойств ID ресурса обозначен как IDR_TXT1, также в свойстве External file указал "false".
Теперь нужно найти ресурс и подгрузить его. Вопрос по FindResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR pType):
hModule я могу указать просто как NULL (тогда искать будет в образе, созданном при запуске программы)?
lpName - не пойму также, что нужно мне использовать?
pType - тип какой, "txt"?
Также FindResource выдает тип HRSRC, его описание находится в файле WinNT.h - никак не могу подключить этот файл, как это правильно сделать? У меня пустой консольный проект.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.11.2013, 20:52
Цитата Сообщение от clever_man Посмотреть сообщение
hModule я могу указать просто как NULL (тогда искать будет в образе, созданном при запуске программы)?
Да.

Цитата Сообщение от clever_man Посмотреть сообщение
lpName - не пойму также, что нужно мне использовать?
IDR_TXT1

Цитата Сообщение от clever_man Посмотреть сообщение
pType - тип какой, "txt"?
Да.

Цитата Сообщение от clever_man Посмотреть сообщение
Также FindResource выдает тип HRSRC, его описание находится в файле WinNT.h - никак не могу подключить этот файл, как это правильно сделать?
#include <Windows.h>
1
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
17.11.2013, 21:14  [ТС]
Убежденный, как правильно задать тип? Пишу
C++ (Qt)
1
SecTXT = FindResource(NULL, IDR_TXT1, txt)
Выдает:
Code
1
error C2065: 'txt' : undeclared identifier
Пишу
C++ (Qt)
1
SecTXT = FindResource(NULL, IDR_TXT1, "txt")
Выдает:
Code
1
error C2664: 'FindResourceW' : cannot convert parameter 2 from 'int' to 'LPCWSTR'
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.11.2013, 21:25
Цитата Сообщение от clever_man Посмотреть сообщение
error C2664: 'FindResourceW' : cannot convert parameter 2 from 'int' to 'LPCWSTR'
MAKEINTRESOURCEW(IDR_TXT1)

...И предвидя следующий вопрос, почему пишет "cannot convert parameter 3 from char const to LPCWSTR",
отвечаю - надо так:
C++
1
L"txt"
1
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
17.11.2013, 22:01  [ТС]
Убежденный, блин, а почему строка
C++ (Qt)
1
SecTXT = LoadResource(NULL, hRes);
Выдает ошибку:
Code
1
error C2440: '=' : cannot convert from 'HGLOBAL' to 'HRSRC'
Это же, блин, пример из справки!
А на ErrorHandler вообще ругается, что не может найти:
Code
1
 error C3861: 'ErrorHandler': identifier not found
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.11.2013, 22:05
Цитата Сообщение от clever_man Посмотреть сообщение
Это же, блин, пример из справки!
Покажите мне эту справку.
0
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
17.11.2013, 22:10  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Покажите мне эту справку.
Она локальная, вместе с Visual Studio 2008
Вот пример кода из описания:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
HRSRC hResLoad;     // handle to loaded resource 
HANDLE hExe;        // handle to existing .EXE file 
HRSRC hRes;         // handle/ptr. to res. info. in hExe 
HANDLE hUpdateRes;  // update resource handle 
char *lpResLock;    // pointer to resource data 
BOOL result; 
// Load the .EXE file that contains the dialog box you want to copy. 
hExe = LoadLibrary("hand.exe"); 
if (hExe == NULL) 
{ 
    ErrorHandler("Could not load exe."); 
} 
 
// Locate the dialog box resource in the .EXE file. 
hRes = FindResource(hExe, "AboutBox", RT_DIALOG); 
if (hRes == NULL) 
{ 
    ErrorHandler("Could not locate dialog box."); 
} 
 
// Load the dialog box into global memory. 
hResLoad = LoadResource(hExe, hRes); 
if (hResLoad == NULL) 
{ 
    ErrorHandler("Could not load dialog box."); 
} 
 
// Lock the dialog box into global memory. 
lpResLock = LockResource(hResLoad); 
if (lpResLock == NULL) 
{ 
    ErrorHandler("Could not lock dialog box."); 
} 
 
// Open the file to which you want to add the dialog box resource. 
hUpdateRes = BeginUpdateResource("foot.exe", FALSE); 
if (hUpdateRes == NULL) 
{ 
    ErrorHandler("Could not open file for writing."); 
} 
 
// Add the dialog box resource to the update list. 
result = UpdateResource(hUpdateRes,       // update resource handle 
     RT_DIALOG,                   // change dialog box resource 
     "AboutBox",                  // dialog box name 
     MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),  // neutral language
     lpResLock,                   // ptr to resource info 
     SizeofResource(hExe, hRes)); // size of resource info. 
if (result == FALSE) 
{ 
    ErrorHandler("Could not add resource."); 
} 
 
// Write changes to FOOT.EXE and then close it. 
if (!EndUpdateResource(hUpdateRes, FALSE)) 
{ 
    ErrorHandler("Could not write changes to file."); 
} 
 
// Clean up. 
if (!FreeLibrary(hExe)) 
{ 
    ErrorHandler("Could not free executable."); 
}
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.11.2013, 22:16
Неплохо бы еще и Ваш код глянуть...
0
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
17.11.2013, 22:18  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Неплохо бы еще и Ваш код глянуть...
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//main.cpp
 
#include <iostream>
#include <fstream>
#include "resource.h"
#include <Windows.h>
 
using namespace std;
 
int main()
{
    HRSRC hRes;
    HRSRC SecTXT;     // Дескриптор нашего файла ресурсов 
    
    hRes = FindResource(NULL, MAKEINTRESOURCEW(IDR_TXT1), L"txt");
    SecTXT = LoadResource(NULL, hRes); 
    if (hRes == NULL) 
    { 
        ErrorHandler("Could not load dialog box."); 
    } 
    
    
    return 0;
}
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.11.2013, 22:27
HRSRC SecTxt;

HGLOBAL SecTxt;
1
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
18.11.2013, 22:47  [ТС]
Убежденный, понимаю, что вас я уже достал, но блин, я не понимаю, почему я не могу использовать примеры из MSDN?
Вот продолжение, пытаюсь получить указатель:
C++ (Qt)
1
2
char* lpResLock;
lpResLock = LockResource(SecTXT);
и получаю опять ошибку несоответствия типов:
Code
1
error C2440: '=' : cannot convert from 'LPVOID' to 'char *'
Почему? Также написано в документации??
И подозреваю, что с получением длины указателя тоже проблемы будут?
Я думал, что это делать надо так:
C++ (Qt)
1
2
int len;
SizeofResource(NULL, hRes); //могу ли я использовать NULL, в MSDN в описании про NULL не сказано? И если нет, то тогда как получить ресурс именно данной программы?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
18.11.2013, 23:05
Цитата Сообщение от clever_man Посмотреть сообщение
Убежденный, понимаю, что вас я уже достал, но блин, я не понимаю, почему я не могу использовать примеры из MSDN?
Примеры из MSDN написаны, как правило, на C, а там немного другие
правила приведения указателей, чем в C++.
1
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 13
18.11.2013, 23:24  [ТС]
Убежденный, поможете перевести в c++?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2013, 23:24
Помогаю со студенческими работами здесь

Как скомпилировать проект, когда появляется такая ошибка: "Где взять LNK1104 не удается открыть файл “icmp.lib”"?
Здравствуйте! Как скомпилировать проект, когда появляется такая ошибка: &quot;Где взять LNK1104 не удается открыть файл “icmp.lib”&quot;? Из...

Задача с использованием структуры «текстовый файл» (в файле хранится текст) 1) Переписать в другой текстовый файл самую
Задача с использованием структуры «текстовый файл» (в файле хранится текст) 1) Переписать в другой текстовый файл самую короткую и самую...

Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого содержит символы
Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого содержит символы соответствующей строки...

Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого содержит символы
Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого содержит символы соответствующей строки...

Текстовый файл содержит список фамилий и должность сотрудников. Сформировать текстовый файл, содержащий фамил
Текстовый файл содержит список фамилий и должность сотрудников. Сформировать текстовый файл, содержащий фамилии сотрудников, работающих ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru