Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
СуперМодулятор
 Аватар для Bringoff
134 / 134 / 48
Регистрация: 03.11.2012
Сообщений: 974

Из plain C в C++ Win32 API - копирование файлов

27.02.2015, 10:43. Показов 2063. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код на C:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
 
#define COPY_BLOCK_SIZE 64
#define PROGRAM_NAME argv[0]
#define INPUT_FILE_NAME argv[1]
#define OUTPUT_FILE_NAME argv[2]
 
int main(int argc, char ** argv) {
    unsigned char buf[COPY_BLOCK_SIZE];
    FILE * fin, * fout;
    size_t bytes;
    
    if ( argc < 3 ) {
        fprintf(stderr, "Usage: %s input_file output_file\n", PROGRAM_NAME);
        getchar();
        exit(1);
    }
    
    if ( ! ( fin = fopen(INPUT_FILE_NAME, "rb") ) ) {
        fprintf(stderr, "%s: can't open %s for input!\n", PROGRAM_NAME, INPUT_FILE_NAME);
        getchar();
        exit(1);
    }
    if ( ! ( fout = fopen(OUTPUT_FILE_NAME, "wb") ) ) {
        fprintf(stderr, "%s: can't open %s for output!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
        if ( fclose(fin) )
            fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, INPUT_FILE_NAME);
        getchar();
        exit(1);
    }
    
    while ( ( bytes = fread(buf, sizeof(char), COPY_BLOCK_SIZE, fin) ) != (size_t)EOF && bytes > 0 ) {
        if ( fwrite(buf, sizeof(char), bytes, fout) != bytes ) {
            fprintf(stderr, "%s: can't write to %s!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
            if ( fclose(fin) )
                fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, INPUT_FILE_NAME);
            if ( fclose(fout) )
                fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
            getchar();
            exit(1);
        }
    }
    
    if ( ferror(fin) ) {
        fprintf(stderr, "%s: can't readf rom %s!\n", PROGRAM_NAME, INPUT_FILE_NAME);
        if ( fclose(fin) )
            fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, INPUT_FILE_NAME);
        if ( fclose(fout) )
            fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
        getchar();
        exit(1);
    }
    
    if ( fclose(fin) ) {
        fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, INPUT_FILE_NAME);
        if ( fclose(fout) )
            fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
        getchar();
        exit(1);
    }
    
    if ( fclose(fout) ) {
        fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
        getchar();
        exit(1);
    }
    
    fprintf(stderr, "Done.\n");
    getchar();
    exit(0);
}
Кто может переделать, чтобы использовались возможности Win32 API? То есть, чтобы переменные были WINAPI-шных типов (DWORD, CHAR и т. д), использовались аналоги функций из windows.h типа CreateFile, WriteFile (Только не CopyFile Надо вручную). А то сам в винапи ни бум бум, а надо срочно. Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2015, 10:43
Ответы с готовыми решениями:

Ошибка компиляции простой программы
Здравствуйте, читатели данной темы.Решил изучить C++ Win32 API.Но вот на сайте хотел скопировать код и глянуть как все работает, но не тут...

Практикум по Win32 API
Нигде не могу найти самостоятельные задания по винапи, подкиньте книги или дайте ссылочку, пожалуйста, на различные задания. Хочется руку...

Библиотека по Win32 API
Посоветуйте справочник с довольно большим количеством функций (Желательно русский)

1
СуперМодулятор
 Аватар для Bringoff
134 / 134 / 48
Регистрация: 03.11.2012
Сообщений: 974
28.02.2015, 17:13  [ТС]
Лучший ответ Сообщение было отмечено Bringoff как решение

Решение

Эхх... Сам не сделаешь - никто не поможет.
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
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
#define COPY_BLOCK_SIZE 64
#define PROGRAM_NAME argv[0]
#define INPUT_FILE_NAME argv[1]
#define OUTPUT_FILE_NAME argv[2]
 
int main(int argc, LPTSTR argv []) {
    CHAR buf[COPY_BLOCK_SIZE];
    HANDLE hin, hout;
    DWORD bytes;
    
    if ( argc < 3 ) {
        fprintf(stderr, "Usage: %s input_file output_file\n", PROGRAM_NAME);
        getchar();
        exit(1);
    }
 
    if ( ( hin = CreateFile (argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL ))
                 == INVALID_HANDLE_VALUE ) {
        fprintf(stderr, "%s: can't open %s for input!\n Error: %x\n", PROGRAM_NAME, INPUT_FILE_NAME, GetLastError());
        getchar();
        exit(1);
    }
 
    if ( ( hout = CreateFile (argv[2], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ))
                 == INVALID_HANDLE_VALUE ) {
        fprintf(stderr, "%s: can't open %s for output!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
        if ( ! CloseHandle(hin) )
            fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, INPUT_FILE_NAME);
        getchar();
        exit(1);
    }
 
    while ( ReadFile(hin, buf, COPY_BLOCK_SIZE, &bytes, NULL ) && bytes > 0 ) {
        if ( ! WriteFile ( hout, buf, bytes, &bytes, NULL )) {
            fprintf(stderr, "%s: can't write to %s!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
            if ( ! CloseHandle(hin) )
                fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, INPUT_FILE_NAME);
            if ( ! CloseHandle(hout) )
                fprintf(stderr, "%s: can't properly close %s!\n", PROGRAM_NAME, OUTPUT_FILE_NAME);
            getchar();
            exit(1);
        }
    }
    
    fprintf(stderr, "Done.\n");
    getchar();
    exit(0);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2015, 17:13
Помогаю со студенческими работами здесь

Текст в Win32 API
Вывести строку символов в окно программы. Захватить строку нажатием левой кнопки мыши. Переместить строку в другую область окна с помощью...

Змейка на win32 api C++
ребят, возможно у кого затерялась змейка на win32 api C++, даже самый примитивный вариант сойдет, главное чтобы работал) Очень прошу,...

ComboBox Win32 API
Здравствуйте, для чего нужен ComboBox? В диалоговом окне Я добавил 2 ComboBox и в них запихал радио кнопки, посути они должны были...

Не получается использовать win32 api
создаю проект путем file-&gt;new-&gt;aplication вставляю код #include &lt;windows.h&gt; /* Declare Windows procedure */ LRESULT CALLBACK...

VS Win32 APi and HTMLayout.dll
Здравствуйте начал изучать htmlayout для создания GUi Не подскажете как при запуске приложения сразу загружать мой skin.htm из папки...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru