Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101

Сохранение в файл, имя которого считывается

31.03.2018, 19:47. Показов 866. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь записать информацию в файл, имя его считываю из конфигурационного файла, он текстовым идет. То есть в файле cfg.txt имя файла 2.txt, но ничего не записывается. cfg.txt существует, туда заранее прописывают данные - имя файла для сохранения. Подскажите, пожалуйста, как разобраться?
C++
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
void dataBaseTrain::getConfing(char* &string)
{
    char* files=new char [81];
    HANDLE file=CreateFile(TEXT("cfg.txt"),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    char inBuffer[7000];
    DWORD lpNumberOfBytesWritten;
    if (file != INVALID_HANDLE_VALUE)
    {
        char st[100];
        int i=0;
        int j=0;
        bool bResult = ReadFile(file, &inBuffer,sizeof(char)*7000, &lpNumberOfBytesWritten, NULL) ;
        do
        {
            st[j]=inBuffer[i];
            i++;
            j++;
        }while(inBuffer[i]!='*');
        string = st;
    }
    CloseHandle(file);
}
 
/*! 
*   Сохранить данные в заданный файл
*/
void dataBaseTrain::save()
 {
    int a =datMod.count();
    DWORD lpNumberOfBytesWritten;
    char* str;
    getConfing(str);
    if(str!=NULL)
    {
        //дескриптор открытого файла HANDLE
        //HANDLE hFile = CreateFile(TEXT ("file.txt"), GENERIC_READ| GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//открывается или создается файл, но здесь конкретно он задан
        //считываю из cfg
        HANDLE hFile = CreateFile((LPCWSTR)(&str), GENERIC_READ| GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        char *s=new char[11];
        s=itoa(a, s, 10);
        WriteFile(hFile,s, strlen(s),&lpNumberOfBytesWritten,NULL); //Записываем количество записей
    }
}
Не могу понять ,где возникает ошибка...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2018, 19:47
Ответы с готовыми решениями:

Дан файл, из которого считывается массив n*m. Поменять в нем местами строки с max и min элементами
Дан файл, из которого считывается массив n*m. Поменять в нем местами строки с max и min элементами

Напишите командный файл, создающий текстовый файл, имя которого задается как параметр командного файла
1. Напишите командный файл, создающий текстовый файл, имя которого задается как параметр командного файла. BATFILE.BAT <текстовый...

Напишите командный файл, создающий текстовый файл, имя которого задается как параметр командного файла
1. Напишите командный файл, создающий текстовый файл, имя которого задается как параметр командного файла. BATFILE.BAT <текстовый...

4
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,112
01.04.2018, 11:28
Тут неправильное использование указателя (что такое строка в Си).
C++
1
2
    char* str;
    getConfing(str);
Тут неправильное преобразование (различные кодировки строк, преобразование кодировок, адрес строки).
C++
1
    CreateFile((LPCWSTR)(&str), ...
0
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
01.04.2018, 13:34  [ТС]
А как нужно переделать? Просто char str[100]; к примеру, так строку обрабатывать...
А с функцией CreateFile из WinAPI вообще сложности...
0
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,112
01.04.2018, 13:49
C++
1
2
3
4
5
6
7
8
9
10
// чтение конфига может выглядеть как-то так
// void getConfig(char chFilename[MAX_PATH])
// {
//     ...
//     strcpy(chFilename, <то что прочли из конфига>);
//     ...
// }
 
char chFilename[MAX_PATH] = {0};
getConfig(chFilename);
CreateFile - это макрос, который превращается в CreateFileA или CreateFileW в зависимости от настроек проекта. Если проект без юникода, то и передавать в CreateFile нужно обычную строку (char).
C++
1
CreateFile(chFilename, ...
0
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
01.04.2018, 14:31  [ТС]
Спасибо, я тоже вариант придумала, правда длиннее код...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char str[100]="";
    getConfing(str);
    if(str!=NULL)
    {
        
        char string[2][10]={{""},{""}};
        strcpy(string[1],str);
        
        wchar_t wsa[MAX_PATH];
        int jc;
        for(jc=0;jc<strlen(string[1]);jc++)
            wsa[jc]=(wchar_t)string[1][jc];
        wsa[jc]='\0';
   
        HANDLE hFile = CreateFile(wsa, GENERIC_READ| GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
/////////
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2018, 14:31
Помогаю со студенческими работами здесь

Открыть файл, имя которого задается с клавиатуры. Переписать в новый файл только те слова, которые состоят из цифр
В коде надо сделать так, чтобы он находил цифры, а не игнорировал их, и, по возможности выводил на экран, или другой нормальный вывод...

Открыть файл, имя которого задается с клавиатуры. Посчитать количество байт в этом файле. Первую половину прочитанного файла записать в другой файл.
ребят помогите! плиз!!1. Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк-ран количество байт в этом файле....

Не открывается файл, имя которого введено с клавиатуры
(имя файла указывает пользователь программы,); char name_file_input; cout &lt;&lt; &quot;Введите название файла: &quot;; cin.ignore(); ...

Создать файл, имя которого введено с клавиатуры
создать файл, имя которого введено с клавиатуры

Открыть файл, имя которого выбрано в ComboBox
Подскажите как прописать код для кнопки, для того чтобы после нажатия открывался файл Excel из необходимой директории, в зависимости от...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru