Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 131

Передача в программу названий входного и выходного файла из консоли

09.07.2022, 21:59. Показов 3378. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане! Начал изучать с++ и сделал небольшую программку, которая на вход принимает файл в формате .sig(2 байта длина инфы + инфа). На выходе все записывается в файл в HEX виде. Чтобы сделать более гибкой программу, знаю, что можно задать названия входного и выходного файла из консоли через параметры main`а, так вот вопрос, как это сделать?
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
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <sstream>
#include <iomanip>
 
#define _CRT_SECURE_NO_WARNINGS
 
using namespace std;
 
void convHex(char* arr, int size)
{
    ofstream writeHex;
    writeHex.open("eth_hex.txt",ofstream::app);
    if (writeHex.is_open()) 
    {
        writeHex.clear();
        for (int i = 0; i < size; ++i)
        {
            writeHex << setw(2) << setfill('0') << hex << (0xff & (unsigned int)arr[i]); //setfill() для заполнения пробелов; setw(*) - задает ширину поля
                                                     //вопрос в маске, почему только 0хff, хотя выводилось ffffff92
        }
        writeHex << "\n";
    }
}
 
 
int main(int argc, char **argv)
{
    /*string inFile, outFile;
 
    if (argc != 3) 
    {
        printf("Error: found %d arguments. Need exactly 2", argc - 1);
        exit(1);
    }
    inFile = argv[1];
    outFile = argv[2];*/
 
 
    setlocale(LC_ALL, "ru");
    if (remove("eth_hex.txt") != 0)
        std::cout << "Deleted error\n";
    else
        std::cout << "Deleted\n";
 
    ifstream fin("eth.sig", ios::binary);
 
    if (!fin.is_open())
    {
        std::cout << "File opening error!" << endl;
    }
    else
    {
        std::cout << "File is open!" << endl;
        int16_t len_ = 0;                           //2х байтовый int
 
        char* buf = new char[65535];                //т.к. максимальная длина 2хбайтового int 65535 - то выделяем размер буфер
        while (!fin.eof())
        {
            fin.read((char*)(&len_), 2);            //считываю из файла первые 2 байта
            
            if (len_ <= 0)
            {
                std::cout << "File is broken!";
                break;
            }
            
            fin.read(buf, (int)len_);               //считывание в буфер из файла len_ байт
 
            convHex(buf, len_);                     //перевод .sig в HEX и запись в файл
 
         
            //memset(buf, 0, len_);
        }
 
        std::cout << "Recording completed!";
    }
    fin.close();
    
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.07.2022, 21:59
Ответы с готовыми решениями:

Имена входного и выходного файла
Написал код программы, но еще нужно чтобы Входные данные были в файле Z.inp Результат работы были в файле Z.out, как это сделать не знаю.

Ввод входного и выходного файла
Есть рабочая программа для копирования файлов. Задача: Сделать так, чтобы при запуске экзешника пользователь мог ввести с клавиатуры...

Записать в строки выходного файла буквы в порядке уменьшения частоты их встречаемости в строках входного файла
17. В исходном текстовом файле записаны строки, содержащие текст на английском языке. Требуется написать программу, которая для каждой...

29
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 131
10.07.2022, 23:35  [ТС]
Студворк — интернет-сервис помощи студентам
Наталья8, Разве это поможет передать outFile в 3 строку?(для того, чтобы outFile имел возможность дозаписи в файл)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void convHex(ofstream & outFile, char* arr, int size)
{
    outFile.open("eth_hex.txt", ofstream::app);
    if (outFile.is_open())
    {
        outFile.clear();
        for (int i = 0; i < size; ++i)
        {
            outFile << setw(2) << setfill('0') << hex << (0xff & (unsigned int)arr[i]); //setfill() для заполнения пробелов; setw(*) - задает ширину поля
                                                     //вопрос в маске, почему только 0хff, хотя выводилось ffffff92
        }
        outFile << "\n";
    }
}
Добавлено через 36 секунд
Наталья8, установлен, умею. Но с этой проблемой уже 3й день мучаюсь, поэтому и написал
0
 Аватар для Наталья8
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,380
10.07.2022, 23:39
Файл для добавления открываеться вот таким ключём.
C++
1
outFile.open("eth_hex.txt", ofstream::app);
Моя любимая функция для студентов.
C++
1
2
3
4
5
6
7
8
9
10
void go_file(std::string msg){
    std::ofstream fout;
    fout.open("output_file.txt", std::ofstream::app);
    if (fout.is_open()) {
        if (msg.length() > 0){
            fout.write(msg.c_str(), msg.length());
            fout.write("\n", 1);
        }   }
fout.close();
    }
При вызове строкою, добавляет эту строку в файл.
0
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 131
10.07.2022, 23:43  [ТС]
Цитата Сообщение от Наталья8 Посмотреть сообщение
Файл для добавления открываеться вот таким ключём.
Это я прекрасно понимаю, но при данном написании, открывается файл "eth_hex.txt", а не тот, который ввел пользователь(название которого лежит в outFile)
0
 Аватар для Наталья8
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,380
10.07.2022, 23:46
Angel of death take mi now.....

https://www.cyberforum.ru/atta... 1657485969
Миниатюры
Передача в программу названий входного и выходного файла из консоли  
0
 Аватар для Наталья8
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,380
11.07.2022, 00:39
Лучший ответ Сообщение было отмечено Dedy111ka как решение

Решение

C++
1
2
3
void go_file(const char *_fl, std::string msg){
    std::ofstream fout;
    fout.open(_fl, std::ofstream::app);//<<<==== ЛЮБОЙ ФАЙЛ (принимает указатель на адрес файла _fl)
1
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 131
11.07.2022, 19:34  [ТС]
Наталья8, Большое спасибо!
0
 Аватар для Наталья8
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,380
12.07.2022, 12:50
Добавлю..
Вы все здесь пишете на этом форуме, вот такие пути. "output_file.txt"
fout.open("output_file.txt", std::ofstream::app);
Это годиться для студентов.
Но если захочешь написать, что то для пользы.
То полный путь до текста, который валяеться в папке с экзешником,
прописываеться вот так....

C++
1
2
3
4
static wchar_t restart[512] = { '\0' };
     GetModuleFileName(GetModuleHandle(NULL), restart, 512);// Полный путь к эксе файлу
     *(wcsrchr(first_self, L'\\') + 1) = '\0'; // ====== ноль вместо последнего слеша отрезать экзешник  (wchar_t)
         wcscat(first_self, L"FolderFor.txt");// Добавить имя файла
А то, когда вы захотите запустить своё творчество от админа, или через шедулер,
окажеться, что ни какой текст программа не находит.

Добавлено через 3 минуты
Далее манипулируем указателем --- restart
(это под широкие строки)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.07.2022, 13:34
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вы все здесь пишете на этом форуме, вот такие пути. "output_file.txt"
fout.open("output_file.txt", std::ofstream::app);
Это годиться для студентов.
А знаешь ответ почему это годится для студентов ?
И почему тут так пишут.
И почему твой вариант вообще ни куда не годится ?

Наталья8, костыли-костылики
0
 Аватар для Наталья8
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,380
12.07.2022, 14:06
Конечно это винда..
Я не линуксоид.
Как такое делают на линухе не знаю.

Добавлено через 4 минуты
C++
1
#include<windows.h>
Добавлено через 3 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
И почему твой вариант вообще ни куда не годится ?
Не предлагаю я свой вариант. Просто нужен полный путь.

Добавлено через 5 минут
Весь MSDN костыли?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.07.2022, 14:24

Не по теме:

Цитата Сообщение от Наталья8 Посмотреть сообщение
Весь MSDN костыли?
Смотря в каком контексте.

Если нет необходимости в использовании WinApi на прямую, тогда такое использование - костыль.



На счет полного пути так же не полностью согласен. Есть понятие "рабочей папки".
Зачем привязываться к определенному пути ? Для этого должно быть обоснование.
Какое оно может быть в учебных программах ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2022, 14:24

Простая сортировка массива, с использованием входного и выходного файла
Добрый день. Задача: дан массив целых чисел - отсортировать его в порядке неубывания. Формат входного файла В первой строке входного...

Ввод имени входного/выходного файла с клавиатуры (fstream)
Подскажите, пожалуйста, как можно организовать ввод имени входных/выходных файлов для их последующего использования с помощью библиотеки...

Сборка библиотеки и ошибка "fatal error LNK1149: имя выходного файла совпадает с именем входного файла"
при сборке библиотеки возникает такая ошибка LINK : fatal error LNK1149: имя выходного файла совпадает с именем входного файла, объясните...

Как добавить в код выбор входного файла и выбор выходного?
Здравствуйте. Нужна ваша помощь, вот есть код, как сюда можно добавить выбор входного и выходного файла? Чтобы сначала выбирал файл,...

График зависимости выходного напряжения от входного в Мультисим
Нужно построить график зависимости выходного напряжения стабилизатора от входного в мультисим 13.0 Кто знает как это сделать?


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru