Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203

Не работает функция CreateFileA, не переносятся знаки табуляции

08.03.2025, 16:35. Показов 2994. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Вопрос 1
Пишу в файл в одном проекте с помощью фунции CreateFileA но не работает, файл не создается или запись не происходит, но неделю назад все работало и сейчас в других проектах этот код работает если его скопировать. Я ничего не менял в настройках проекта.
C++
1
2
3
4
DWORD fcount5; char buf1[10];
    HANDLE hfile10 = CreateFileA("D:\\file1.txt", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL);//dbg
    SetFilePointer(hfile10, 0, NULL, FILE_BEGIN); WriteFile(hfile10, buf1,10, &fcount5, NULL);
    CloseHandle(hfile10);
Вопрос 2
Я работаю в MS VS Enterprise 2019 если я скопирую функцию и перенесу в другой файл пропадают символы табуляции как это исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2025, 16:35
Ответы с готовыми решениями:

Preg_match_all и знаки табуляции
Здравствуйте У меня постоянно возникает проблема с выборкой со страниц с HTML кодом нужной мне информации. При написании регулярного...

Почему появляются знаки табуляции
Привет всем , использую вот такой код для чтения и записи в файл проблема в том что по окончании в тхт появляется первая/последняя...

Заменить знаки разделителя на знак табуляции
Как вместо знаков разделителя , ; .. - в тексте поставить знак табуляции \t

13
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
08.03.2025, 18:14
Цитата Сообщение от korez Посмотреть сообщение
не работает, файл не создается или запись не происходит
чтобы не гадать, пиши нормально

Например, после CreateFileA проверяй

C++
1
2
3
4
5
6
if (hfile10 == INVALID_HANDLE_VALUE) 
{
        DWORD error = GetLastError();
        printf("Error opening the file. Error code: %lu\n", error);
        return 1;
}
Если ошибка, то программа выводит код ошибки и завершается.

Тут есть список всех кодов ошибок https://learn.microsoft.com/en... rror-codes
По ошибке поймешь, что не так.


Также само проверяй на ошибки после WriteFile.

C++
1
2
3
4
5
6
7
if (!WriteFile(hfile10, buf1, 10, &fcount5, NULL)) 
{
        DWORD error = GetLastError();
        printf("Error writing to the file. Error code: %lu\n", error);
        CloseHandle(hfile10);
        return 1;
}
Это тебе поможет лучше понять, в чем дело.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13200 / 6835 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
08.03.2025, 19:16
Цитата Сообщение от korez Посмотреть сообщение
если я скопирую функцию и перенесу в другой файл пропадают символы табуляции
Что значит "пропадают"? Заменяются на пробелы? Значит надо смотреть настройки редактора для файлов соответствующего типа: настроено ли там использовать пробелы или табуляции.
1
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
09.03.2025, 18:20  [ТС]
Royal_X, спасибо за ваш ответ, странно раньше я делал такую проверку используя функцию GetLastError() возвращаемое значение было 0, то есть нет ошибки. Сейчас 183 - "Невозможно создать файл, так как он уже существует", но файла нет проверил на обоих дисках меняя букву.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
09.03.2025, 18:39
korez, нет тут никаких проблем

вы используете флаг OPEN_ALWAYS, а согласно документации

Opens a file, always.
If the specified file exists, the function succeeds and the last-error code is set to ERROR_ALREADY_EXISTS (183).

If the specified file does not exist and is a valid path to a writable location, the function creates a file and the last-error code is set to zero.
Т.е. установление ошибки 183 не говорит о том, что код выполнился некорректно. Просто файл уже существовал и он открыл его. Вот был бы флаг CREATE_NEW, тогда у вас была бы ошибка, если файл уже существовал бы.

Проверяйте теперь следующий кусок кода.
0
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
09.03.2025, 19:56  [ТС]
Royal_X, Нет не заработало ошибка 80 "Файл существует". Другой проект работает все пишет нормально.

Добавлено через 14 минут
TheCalligrapher, вот пример вот символы табуляции
C++
1
2
3
4
5
6
7
8
9
10
11
void Function1()
{   int a1;
    if(1)
    {   a1=0; 
        if(1)
        {   int b1;
            if(1)
            {   int b2; }
        }
    }
}
вот что получилось при копировании в том же проекте в другой файл.
C++
1
2
3
4
5
6
7
8
9
10
11
void Function1()
{   int a1;
if(1)
{   a1=0; 
if(1)
{   int b1;
if(1)
{   int b2; }
}
}
}
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
09.03.2025, 20:55
korez, я вот написал код, табуляция в созданном файле есть

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
#include <windows.h>
#include <iostream>
 
int main() {
   
   
    const char* text = "Hello\tWorld";
 
    
    HANDLE hfile10 = CreateFileA(
        "C:\\Users\\Anubis\\Downloads\\file1.txt",          
        GENERIC_READ | GENERIC_WRITE, 
        0,                       
        NULL,                   
        OPEN_ALWAYS,             
        FILE_ATTRIBUTE_NORMAL,   
        NULL                      
    );
 
    if (hfile10 == INVALID_HANDLE_VALUE) {
        DWORD error = GetLastError();
        std::cerr << "CreateFileA failed with error " << error << std::endl;
        return 1;
    }
 
   
    SetFilePointer(hfile10, 0, NULL, FILE_BEGIN);
    DWORD fcount5;
    if (!WriteFile(hfile10, text, strlen(text), &fcount5, NULL)) {
        DWORD error = GetLastError();
        std::cerr << "WriteFile failed with error " << error << std::endl;
        CloseHandle(hfile10);
        return 1;
    }
 
    
    CloseHandle(hfile10);
 
    std::cout << "Data written successfully!" << std::endl;
    return 0;
}
Добавлено через 6 минут
korez, попробуй у себя, только поменяй путь файла

Добавлено через 35 секунд
korez, Потому что у меня файл создается и табуляция есть

Добавлено через 5 минут
Цитата Сообщение от korez Посмотреть сообщение
вот символы табуляции
скопировал и вставил в редактор - там одни пробелы, нет табуляции
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
09.03.2025, 21:00
Цитата Сообщение от Royal_X Посмотреть сообщение
там одни пробелы, нет табуляции
На этом форуме в листингах не используется табуляция.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
09.03.2025, 21:15
korez, напиши внятно, откуда ты берешь текст для записи, у тебя этого нет.
Цитата Сообщение от korez Посмотреть сообщение
char buf1[10];
что это вообще? этого не хватит для
Цитата Сообщение от korez Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
void Function1()
{   int a1;
    if(1)
    {   a1=0; 
        if(1)
        {   int b1;
            if(1)
            {   int b2; }
        }
    }
}
0
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
10.03.2025, 01:25  [ТС]
Royal_X, Ошибка 183. наверное нужно Windows переустановить уже 2 года.

Добавлено через 32 секунды
не переустанавливал.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
10.03.2025, 02:52
korez, ну да. Ещё драйвера обнови и пыль с монитора протри.
0
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
16.03.2025, 17:30  [ТС]
Проблема разрешилась сама собой теперь все работает.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13200 / 6835 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
16.03.2025, 18:10
Цитата Сообщение от korez Посмотреть сообщение
Проблема разрешилась сама собой теперь все работает.
Не бывает.
0
459 / 246 / 15
Регистрация: 29.10.2014
Сообщений: 1,084
17.03.2025, 15:19
Цитата Сообщение от korez Посмотреть сообщение
пропадают символы табуляции
Что такое есть "символы табуляции" в потоке? Иначе говоря, желательно заменить кириллицу на латиницу:
ТИП ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ;
cout << ЗНАЧЕНИЕ;
(пусть иначе, но суть вопроса остается)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2025, 15:19
Помогаю со студенческими работами здесь

Как убрать знаки табуляции и точки в коде?
Как убрать знаки табуляции и точки в коде?

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

В строке заменить все знаки табуляции знаком пробела
#include &lt;vcl.h&gt; #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;windows.h&gt; #include &lt;stdio.h&gt; char Rus; ...

Заменив пробелы символами табуляции и удалив знаки препинания
Вывести на экран введенную строку, предварительно заменив пробелы символами табуляции и удалив знаки препинания «.», «,» и «;».

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru