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

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

09.07.2022, 21:59. Показов 3231. Ответов 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
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,217
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
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,217
10.07.2022, 23:46
Angel of death take mi now.....

https://www.cyberforum.ru/atta... 1657485969
Миниатюры
Передача в программу названий входного и выходного файла из консоли  
0
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,217
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
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,217
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
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,217
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
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru