Я пишу код, который берет один файл и сохраняет его в другом с другим именем, однако я не уверен, нужно ли мне закрывать оба файла или нет?
FILE *logfile = fopen("log.txt", "a+");
while(1) {
char filename[500];
char logline[512];
char channel[512];
//Do stuff
sprintf(filename, "%s.log.txt", channel);
freopen(filename, "a+", logfile);
log_to_file(logline, logfile);
}
@EUS Я просмотрел это, но я не использую здесь стандартный вывод или стандартный ввод, это другой файл. (Извините, если это одно и то же, я просто не понимаю)
Когда программа завершится, оба файла будут автоматически закрыты, так что это не обязательно, но рекомендуется.
Вы можете открыть несколько файлов одновременно, просто убедитесь, что вы закрыли их в какой-то момент (если какая-то другая программа попытается получить доступ к файлам, которые вы читаете / записываете, могут возникнуть проблемы). Если вы на 100% уверены, что никто другой не использует эти файлы, делайте что хотите.
freopen
закрывает исходный файл и связывает указанный FILE
указатель с новым файлом. Это означает, что в коде одновременно открыт только один файл, и, следовательно, нужно закрыть только один файл. И да, рекомендуется закрыть файл, когда вы закончите с ним работать.
@ user3386109 Отлично! Это именно то, что я не мог подтвердить - я не был уверен, нужно ли закрыть старый указатель или нет. Спасибо!
The
freopen()
function opens the file whose name is the string pointed to by path and associates the stream pointed to by stream with it. The original stream (if it exists) is closed. [...]
Таким образом, вам не нужно явно закрывать предыдущий поток, после использования просто закройте последний поток.
Возможный дубликат: stackoverflow.com/questions/16122732/…