Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
#1

открыть N штук файлов - C++

24.11.2009, 00:24. Просмотров 549. Ответов 7
Метки нет (Все метки)

не могу разобраться как можно открыть для записи (создать) N штук файлов за один цикл. N задается пользователем.
имена файлов должны задаваться так же пользователем и в цикле,но с этим проблем нет. проблема в том,как составить алгоритм который бы менял переменные f1,f2,f3 и т.д ..так,чтобы за первый проход открывался файл f1, затем f2 ,и в конце fN.подскажите как это сделать
заранее спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
24.11.2009, 00:30     открыть N штук файлов #2
C++
1
2
3
4
5
6
7
8
std::vector<FILE*> files;
 
for (size_t i<0; i<N; i++)
{
   std::string s;
   std::cin >> s;
   files.push_back(fopen(s.c_str(), "r"));
}
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
24.11.2009, 00:40  [ТС]     открыть N штук файлов #3
большое спасибо! только нужен код на чистом Си. и, если не сложно, поясните что это за структура
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
24.11.2009, 00:43     открыть N штук файлов #4
на чистом Си это работать не будет.
расписывать лень, но нужно ввести N, а потом выделить память (realloc) для хранения N указателей FILE*.
в конце работы всё почистить (free) за собой
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
24.11.2009, 09:56  [ТС]     открыть N штук файлов #5
я правильно понял что нужно создать динамический массив указателей?
и можно ли будет потом со всеми этими файлами работать?
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
24.11.2009, 10:05     открыть N штук файлов #6
Правильно. Можно.
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
24.11.2009, 23:13  [ТС]     открыть N штук файлов #7
спасибо большое)
еще два вопроса..
задача,если упрощенно, записать в новый двоичный файл данные исходного файла в блоках по ,допустим, 20 байт.

брал целочисленный массив А[20/sizeof(int)], тогда
fread ((void*)A, sizeof(int), 20/(sizeof(int)), f1); --считывает из исходного файла данные и записывает их в массив А.

а тогда верно ли, что
fwrite ((void*)А,sizeof(int),20/(sizeof(int)),f2) записывает данные в таком же виде,как они были в исходном,или же данные записываются в новом целочисленном формате?

второй вопрос,к этой же задаче.. при таком неявном преобразовании в тип int, у нас могут получаться абсолютно любые числа как элементы массива А,включая и 0,и -1 ? это важно ,поскольку ,когда в исходном файле останется несчитанными например 8 байт (меньше 20) , то в новый файл надо будет записать не все элементы массива а только несколько первых. для этого я хочу обнулять массив каждый раз перед чтением из исходного ,а затем записывать его элементы в новый файл,пока не встретится элемент =0. правильно ли это? ибо если какието данные исходного файла могут кодироваться нулями надо этот способ не подойдет
заранее спасибо)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2009, 18:37     открыть N штук файлов
Еще ссылки по теме:

Открыть файл с C++
Вывести в столбик слова, в которых заданная буква имеется в количестве двух штук C++
Открыть несколько разных файлов C++
Лабораторные по с++. 7 штук C++
C++ Как разбить программу на отдельные модули в количестве 3 штук?

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

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.11.2009, 18:37     открыть N штук файлов #8
записывает данные в таком же виде,как они были в исходном,или же данные записываются в новом целочисленном формате?
Если оба файла открыты в бинарном формате и нет ошибок чтения/записи, тогда верно - будет записано тоже самое.

Добавлено через 13 минут
при таком неявном преобразовании в тип int, у нас могут получаться абсолютно любые числа как элементы массива А,включая и 0,и -1 ?
Да - любые.
это важно ,поскольку ,когда в исходном файле останется несчитанными например 8 байт (меньше 20) , то в новый файл надо будет записать не все элементы массива а только несколько первых. для этого я хочу обнулять массив каждый раз перед чтением из исходного ,а затем записывать его элементы в новый файл,пока не встретится элемент =0. правильно ли это?
Нет - неправильно.

Что именно ты хочешь сделать ?
Скопировать один файл в другой ?

Все делается так.
Заводишь некий буфер, например
char buf[1024];
Далее с помощью fread() читаешь 1024 байта, при этом проверяешь сколько реально байт было считано.
Если было считано 1024 байта, то и записываешь 1024 байта.
Если было считано 13 байт, то и записываешь 13 байт.
Если при чтении встретился конец файла, тогда ничего не пишешь - а просто закрываешь выходной файл ( и входной тоже ).
Yandex
Объявления
25.11.2009, 18:37     открыть N штук файлов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru