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

Функции CreateFile() и WriteFile()

20.04.2009, 19:55. Показов 62164. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, помогите разобраться с функциями CreateFile() и WriteFile().

В следующем простом примере пытаюсь создать файл 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
#define UNICODE
#define _UNICODE
 
#include "stdafx.h"
#include "windows.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR Buffer[256];
    DWORD nLenCurDir;
    HANDLE hOut;
 
    TCHAR stdPath[30] = TEXT("C:\dir\dirpath.txt");
 
    hOut = CreateFile(stdPath, GENERIC_WRITE, 0, NULL,
        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
 
    if (hOut == INVALID_HANDLE_VALUE) {
        printf("ERROR %x \n",GetLastError());
        return 2;
    }
    
    nLenCurDir = GetCurrentDirectory(256, Buffer);
 
 
    WriteFile(hOut, Buffer, 256, NULL, NULL );
 
    CloseHandle(hOut);
    
    return 0;
}
Программа работает не так как бы мне хотелось:
1) файл создается не "C:\dir\dirpath.txt", а в текущей директории с именем "dirdirpath.txt"
2) Текущая директория отображается совершенно неприглядным образом:
русские символы заменяются не пойми чем, английские следуют через несколько то ли нулей, то ли пробелов

Нахожусь в тупике... Объясните пожалуйста мне мои ошибки, буду очень благодарен
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2009, 19:55
Ответы с готовыми решениями:

CreateFile, WriteFile
Подскажите работающий код программы на с++, которая создаёт файл с помощью CreateFile

Createfile, readfile, writefile
Файл 4 создаётся,но данные из файла 1 не переносятся.Почему? HANDLE myFile; HANDLE myFile2; DWORD buf; char asd; myFile =...

Отправка строки байт PCI-e устройству с использованием CreateFile() и WriteFile()
Собственно имеется PCI-e плата, драйвер разработчика для нее и программа позволяющая просматривать память (BAR'ы) платы. Можно ли нормально...

9
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
21.04.2009, 01:31
При указании пути к файлу используй двойную обратную косую \\ (
C:\\dir\\dirpath.txt)
1
3 / 3 / 1
Регистрация: 16.04.2009
Сообщений: 127
21.04.2009, 08:07  [ТС]
Спасибо! Это решило первую проблему!

Как быть со вторым пунктом? Почему там русские символы не отображаются?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
21.04.2009, 19:53
Цитата Сообщение от PMike Посмотреть сообщение
Как быть со вторым пунктом? Почему там русские символы не отображаются?
А в том, чем этот файл потом смотришь, юникод поддерживается?
0
3 / 3 / 1
Регистрация: 16.04.2009
Сообщений: 127
27.04.2009, 07:43  [ТС]
Да, поддерживается
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
27.04.2009, 19:30
Цитата Сообщение от PMike Посмотреть сообщение
2) Текущая директория отображается совершенно неприглядным образом:
русские символы заменяются не пойми чем, английские следуют через несколько то ли нулей, то ли пробелов
Вообще это похоже на то, что всё в файл пишется нормально в юникоде, а читается не в юникоде.
0
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
21.05.2010, 00:54
У меня вылетает на строке:

WriteFile(hFile, Buffer, sizeof(Buffer), 0, 0);

Хотя Buffer заполнен правильно...
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.03.2012, 23:01
C++
1
WriteFile(hFile, (LPVOID)&Buffer, sizeof(Buffer), NULL, NULL);
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
28.03.2012, 16:41
WriteFile, предпоследний параметр:
lpNumberOfBytesWritten [out, optional]
A pointer to the variable that receives the number of bytes written when using a synchronous hFile parameter. WriteFile sets this value to zero before doing any work or error checking. Use NULL for this parameter if this is an asynchronous operation to avoid potentially erroneous results.
This parameter can be NULL only when the lpOverlapped parameter is not NULL.

Добавлено через 6 часов 18 минут
Note: lpOverlapped - последний параметр.
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
29.03.2012, 15:50
Цитата Сообщение от PMike Посмотреть сообщение
Как быть со вторым пунктом? Почему там русские символы не отображаются?
Добавьте в ваш код строку выделенную красным
Цитата Сообщение от PMike Посмотреть сообщение
nLenCurDir = GetCurrentDirectory(256, Buffer);
CharToOem(Buffer,Buffer);
WriteFile(hOut, Buffer, 256, NULL, NULL );
Если не поможет, тогда замените CharToOem на OemToChar это две взаимообратные функции с одной из них у вас точно всё получится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2012, 15:50
Помогаю со студенческими работами здесь

Функции CreateFile и для ReadFileEx для чтения несколькими процессами из текстового файла
Привет, просьба подсказать одну вещь. Чтобы было ясно где используется, кратко опишу: мне необходимо в одной программе взять путь к...

Ошибки CreateFile
File=CreateFile(FileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL); Что происходит, если файла нет? Исключение? Или функция...

CreateFile() == INVALID_HANDLE_VALUE
Вызов происходит с такими параметрами: HANDLE hFile = CreateFile( "out.bin", ...

WinAPI CreateFile
хай.. сорри тупой вопрос.. хочу чтоб в функции создания файла можна самому вписать имя файла.. но не могу плонять почему выдает ошибку ((...

Функция CreateFile
Добрый день. У меня такая проблема при работе с функцией: функция CreateFile возвращает -1, если ей передать полное имя файла или 0, если...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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