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

Не создаётся файл после работы с диалогом сохранения файла

17.05.2017, 21:48. Показов 675. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане! Я учусь работать c WinApi создаю простой текстовый редактор для практики.
Создал окно, меню, акселераторы, диалоги открытия и сохранения файла. Но вот при работе с диалогом сохранения файла, файл не создаётся. Гонял под отладчиком, пишет что неверный указатель на переменную с именем файла при вызове CreateFile. Но как исправить ума не приложу. Подскажите как исправить.

Вот код который создаёт диалог сохранения в файл
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
void F_save()
{
    memset(&svefn, 0, sizeof(svefn));
 
    svefn.lStructSize = sizeof(OPENFILENAME);
    svefn.hwndOwner = hwnd;
    svefn.lpstrFilter = L"Текстовые файлы\0*.txt";
    svefn.lpstrFile = NULL;
    svefn.nMaxFile = 500;
    //svefn.lpstrFileTitle = NULL;
    svefn.lpstrTitle = L"Сохранить как...";
    svefn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
    svefn.lpstrDefExt = NULL;
 
    if (GetSaveFileName(&svefn))
    {
        LONG lenbuf = GetWindowTextLength(hEdit)+1;
        bufedit = new TCHAR[lenbuf];
        savetextfile = CreateFile((LPCWSTR)svefn.lpstrFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        GetWindowText(hEdit, bufedit, lenbuf);
        WriteFile(savetextfile, bufedit, lenbuf, NULL, NULL);
        CloseHandle(savetextfile);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2017, 21:48
Ответы с готовыми решениями:

Не создаётся exe файл. Создаётся папка netcoreapp2.0
На рабочем компе всё нормально, exe лежит в Debug. На домашнем может с настройками что намудрил, может чего лишнего установил... От...

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

Ошибка после сохранения файла
Привет. Версия Delphi7. procedure TForm6.BitBtn3Click(Sender: TObject); Begin if OpenDialog1.Execute then Begin ...

4
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
17.05.2017, 22:18
Если не ошибаюсь, lpstrFile должен быть указателем на буфер для имени файла, например:
C
1
2
TCHAR szFileName[MAX_PATH] = "";
svefn.lpstrFile = szFileName;
0
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 7
17.05.2017, 22:28  [ТС]
Исправил, но теперь появилось нарушение прав доступа при записи...
А файл создаётся, но туда чёрте что пишет.
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
void F_save()
{
    memset(&svefn, 0, sizeof(svefn));
    static wchar_t szFile[500];
 
    svefn.lStructSize = sizeof(OPENFILENAME);
    svefn.hwndOwner = hwnd;
    svefn.lpstrFilter = L"Текстовые файлы\0*.txt";
    svefn.lpstrFile = szFile;
    svefn.lpstrFile[0] = '\0';
    svefn.nMaxFile = 500;
    //svefn.lpstrFileTitle = NULL;
    svefn.lpstrTitle = L"Сохранить как...";
    svefn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
    svefn.lpstrDefExt = L"txt";
 
    if (GetSaveFileName(&svefn))
    {
        LPWSTR bufedit;
        LONG lenbuf = GetWindowTextLength(hEdit)+1;
        bufedit = new TCHAR[lenbuf];
        savetextfile = CreateFile(svefn.lpstrFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        GetWindowText(hEdit, bufedit, lenbuf);
        WriteFile(savetextfile, bufedit, lenbuf, NULL, NULL);
        CloseHandle(savetextfile);
    }
}
0
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
17.05.2017, 22:34
WriteFile пишет char, а не wchar_t
0
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 7
18.05.2017, 07:33  [ТС]
Я решил проблему

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
void F_save()
{
    memset(&svefn, 0, sizeof(svefn));
    static wchar_t szFile[500];
 
    svefn.lStructSize = sizeof(OPENFILENAME);
    svefn.hwndOwner = hwnd;
    svefn.lpstrFilter = L"Текстовые файлы\0*.txt";
    svefn.lpstrFile = szFile;
    svefn.lpstrFile[0] = '\0';
    svefn.nMaxFile = 500;
    svefn.lpstrFileTitle = NULL;
    svefn.lpstrTitle = L"Сохранить как...";
    svefn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
    svefn.lpstrDefExt = L"txt";
 
    if (GetSaveFileName(&svefn))
    {
        TCHAR* bufedit;
        
        LONG lenbuf = GetWindowTextLengthW(hEdit)+1;
        bufedit = new TCHAR[lenbuf];
        savetextfile = CreateFile(svefn.lpstrFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        GetWindowTextA(hEdit, (LPSTR)bufedit, lenbuf);  
        DWORD dw;
        WriteFile(savetextfile, bufedit, lenbuf, &dw, NULL);
        CloseHandle(savetextfile);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2017, 07:33
Помогаю со студенческими работами здесь

После сохранения файла программа не работает
Программа написана в lazarus на os simply linux, работает хорошо. Но после сохранения файла выдает ошибку

После сохранения файла вылетает Excel 2010
Всем привет! У меня такая проблема. мне нужно обновить файл, написанный по 2003 Excel, так чтобы он корректно работал в 2010 (как вы...

Кодировка после сохранения файла не та что нужно
Написал небольшую программку на java для конвертации файлов из файлов txt в html в коде при считывании и сохранении стоит кодировка UTF-8,...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru