Как переименовать файл c

Обновлено: 03.07.2024

В двух предыдущих руководствах мы говорили о функциях файлового ввода-вывода для текстовых файлов и функциях файлового ввода-вывода для двоичных файлов. В этом руководстве по языку программирования C мы рассмотрим, как удалить файлы и как переименовать файл.

Удалить файл

С помощью функции remove() мы можем удалить файл. Давайте рассмотрим пример:

Сначала создается буфер с местом для 100 символов плюс «\0». После того, как на экране появится вопрос «Имя удаляемого файла:», gets_s ожидает ввода не более 100 символов. (Также можно использовать gets(buffer), но gets_s более безопасен, потому что вы не можете переполнить буфер.)

В «операторе if» функция удаления используется для удаления файла. Если файл успешно удален, печатается сообщение об успешном завершении. Если что-то пойдет не так (например, файл не существует), в стандартный поток ошибок выводится сообщение об ошибке.

Переименование файла

С помощью функции rename() мы можем переименовать файл. Давайте рассмотрим пример:

Как и в предыдущем примере, создается буфер для имени файла из 100 символов плюс символ для «\0».
На этот раз также создается второй буфер, который будет содержать новое имя.

В операторе if используется функция rename(). Для функции rename() нужны две переменные: одна для старого имени, а другая для нового имени файла. Если переименование успешно или неудачно, печатается сообщение.

Как видите, удалить или переименовать файл очень просто!

Это все, что касается этого руководства по C.

Эта запись была опубликована в Учебники по C. Вы можете следить за любыми ответами на эту запись через ленту RSS 2.0. И комментарии и запросы в настоящий момент закрыты. Твитнуть это! или используйте, чтобы поделиться этим сообщением с другими.

В настоящее время есть 12 ответов на «Учебник по C — Удаление и переименование файла»

Почему бы не сообщить нам, что вы думаете, добавив свой комментарий!

Этот пример не работает! Используя компилятор Dev C++ версии 4.9.9.2, я также получаю следующую ошибку компиляции:
[Ошибка компоновщика] неопределенная ссылка на `gets_s'

У меня получилось!

int main(void)
char имя_файла[101], новоеимя_файла[101];

printf («Пожалуйста, введите имя файла, который нужно изменить:\n»);
scanf("%s", &filename); /* Получить имя файла с клавиатуры) */

printf("Вы решили переименовать %s.\nПожалуйста, введите новое имя файла:\n", имя_файла);
scanf("%s", &newfilename); /* Получить новое имя файла с клавиатуры) */

if(rename(filename, newfilename) == 0)
printf("%s был переименован в %s.\n", filename, newfilename);
>
else
fprintf(stderr, «Ошибка переименования %s.\n», имя файла);
>
система («пауза»);
система («CLS»);

Я точно не знаю, в чем проблема (похоже, вы пропустили включение), но я снова протестировал два примера, используя VS 2008 (консольное приложение), и они работали нормально.

Дополнительную информацию о gets_s и о том, зачем его использовать, можно найти здесь

Моя вина, теперь я вижу, в чем проблема: ‘gets_s’ не является частью стандарта C, поэтому реализация зависит от вашего компилятора. Я использую Visual Studio, и они реализовали «gets_s», но похоже, что ваш компилятор этого не делает.

Я хочу удалить файл напрямую. Пожалуйста, помогите мне

@Hubiab — я не совсем понимаю, что вы имеете в виду, потому что это руководство по языку C посвящено удалению файлов.
Поэтому я делаю предположение, что вы имеете в виду отсутствие кода вокруг функции remove(). Я получаю это на окнах:

Надеюсь, это то, что вы имеете в виду.

я не понимаю, как изменить имя файла, если у меня есть файл с «c/:desktop/fur.txt»
назначение, так как я могу его переименовать, пожалуйста, помогите мне, пожалуйста

как я могу удалить и добавить файл в простейшей форме кодов

как добавить несколько имен файлов с помощью программы c—
написать фрагмент кода, который решает мою задачу, указанную ниже—

пусть у меня есть папка с именем wild, состоящая из
5 файлов —
кошка,собака,лошадь,лев,тигр

теперь, используя c(концепцию обработки файлов), напишите код для переименования этих файлов как—

животное кошка,животное собака,животное лошадь,животное лев,животное тигр

спасибо за (пример переименования файла), он мне очень помог.
еще раз спасибо

Эта страница руководства является частью Руководства программиста POSIX. Реализация этого интерфейса в Linux может отличаться (подробности о поведении Linux см. на соответствующей странице руководства Linux), или интерфейс может быть не реализован в Linux.

Краткий обзор

int rename(const char *старый, const char *новый);

Описание

Функция rename() должна изменить имя файла. Аргумент old указывает на путь к файлу, который нужно переименовать. Аргумент new указывает на новый путь к файлу.

Если аргумент старый или новый называет символическую ссылку, rename() будет работать с самой символической ссылкой, а не разрешить последний компонент аргумента. Если аргумент старый и аргумент новый разрешаются в один и тот же существующий файл, rename() возвращает успешное значение и не выполняет никаких других действий.

Если аргумент old указывает на путь к файлу, который не является каталогом, аргумент new не должен указывать на путь к каталогу. Если ссылка, названная аргументом new, существует, она должна быть удалена, а old переименована в new. В этом случае ссылка с именем new должна оставаться видимой для других процессов на протяжении всей операции переименования и ссылаться либо на файл, на который ссылается new, либо на old до начала операции. Разрешение на запись требуется как для каталога, содержащего old, так и для каталога, содержащего new.

Если аргумент old указывает на путь к каталогу, аргумент new не должен указывать на путь к файлу, который не является каталогом. Если каталог, указанный аргументом new, существует, он должен быть удален, а old переименован в new. В этом случае ссылка с именем new должна существовать на протяжении всей операции переименования и должна ссылаться либо на каталог, на который ссылается new, либо на old перед операция началась. Если new называет существующий каталог, он должен быть пустым каталогом.

Если аргумент old указывает на путь символической ссылки, символическая ссылка должна быть переименована. Если аргумент new указывает на путь символической ссылки, символическая ссылка должна быть удалена.

Путь нового не должен содержать префикс пути, обозначающий старый. Разрешение на запись требуется для каталога, содержащего old, и каталога, содержащего new. Если аргумент old указывает на путь к каталогу, может потребоваться разрешение на запись для каталога с именем old и, если он существует, для каталога с именем < я>новый.

Если ссылка, названная аргументом new, существует и счетчик ссылок файла становится равным 0, когда он удаляется, и ни один процесс не открывает файл, пространство, занимаемое файлом, должно быть освобождено, а файл больше не будут доступны. Если один или несколько процессов имеют файл, открытый при удалении последней ссылки, ссылка должна быть удалена до возврата из функции rename(), но удаление содержимого файла должно быть отложено до тех пор, пока не будут удалены все ссылки на файл. закрыты.

После успешного завершения rename() помечает для обновления поля st_ctime и st_mtime родительского каталога каждого файла.

Если функция rename() не работает по какой-либо причине, кроме [EIO], любой файл, названный new, не будет затронут.

Возвращаемое значение

После успешного завершения rename() возвращает 0; в противном случае должно быть возвращено -1, errno должно быть установлено для указания ошибки, и ни файл с именем old, ни файл с именем new должен быть изменен или создан.

Ошибки

Функция rename() не работает, если: EACCES Компонент любого префикса пути запрещает поиск; или один из каталогов, содержащих старый или новый, запрещает запись; или требуется разрешение на запись, но оно недоступно для каталога, на который указывают аргументы old или new. EBUSY Каталог с именем old или new в настоящее время используется системой или другим процессом, и реализация считает это ошибкой. EEXIST или ENOTEMPTY

Ссылка с именем new – это каталог, который не является пустым каталогом. EINVAL Путь к новому каталогу содержит префикс пути, обозначающий старый каталог. EIO Произошла физическая ошибка ввода-вывода. EISDIR Аргумент new указывает на каталог, а аргумент old указывает на файл, который не является каталогом. ELOOP Цикл существует в символических ссылках, возникающих при разрешении аргумента path. EMLINK Файл с именем old является каталогом, и количество ссылок родительского каталога new превысит . ЭНАМЕТУЛОНГ

Длина аргумента старый или новый превышает или компонент имени пути длиннее . ENOENT Ссылка с именем old не указывает на существующий файл, либо old или new указывает на пустую строку. ENOSPC Каталог, содержащий new, не может быть расширен. ENOTDIR Компонент любого префикса пути не является каталогом; или аргумент old называет каталог, а аргумент new называет файл, не являющийся каталогом. EPERM или EACCES

Флаг S_ISVTX установлен для каталога, содержащего файл, на который ссылается old, и вызывающий объект не является владельцем файла, не является владельцем каталога и не имеет соответствующих привилегий; или новый относится к существующему файлу, для каталога, содержащего этот файл, установлен флаг S_ISVTX, и вызывающий объект не является владельцем файла, вызывающий объект не является владельцем каталога и у вызывающего объекта нет соответствующих привилегии. EROFS Запрошенная операция требует записи в каталог файловой системы, доступной только для чтения. EXDEV Ссылки с именами new и old относятся к разным файловым системам, и реализация не поддерживает ссылки между файловыми системами.

Функция rename() может завершиться ошибкой, если: EBUSY Файл, указанный в аргументах old или new, является именованным STREAM. ELOOP Во время разрешения аргумента path было обнаружено больше символических ссылок. ЭНАМЕТУЛОНГ

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

Следующие разделы носят информационный характер.

Примеры

Переименование файла

В следующем примере показано, как переименовать файл с именем /home/cnd/mod1 в /home/cnd/mod2.

Использование приложения

Некоторые реализации помечают для обновления поле st_ctime переименованных файлов, а некоторые нет. Приложения, использующие поле st_ctime, могут вести себя по-разному в отношении переименованных файлов, если только они не предназначены для такого поведения.

Обоснование

Эта функция rename() эквивалентна для обычных файлов функции, определенной стандартом ISO C. Его включение сюда расширяет это определение, включая действия над каталогами, и определяет поведение, когда параметр new называет файл, который уже существует. Эта спецификация требует, чтобы действие функции было атомарным.

Одна из причин введения этой функции заключалась в том, чтобы иметь возможность переименовывать каталоги, позволяя реализациям запрещать использование link() и unlink() с каталогами. , тем самым ограничивая ссылки на каталоги ссылками, созданными с помощью mkdir().

Указание о том, что если старый и новый ссылаются на один и тот же файл, гарантирует, что:

не удаляет файл.

Переименование точки или точка-точка запрещено во избежание циклических путей файловой системы.

См. также описания [ENOTEMPTY] и [ENAMETOOLONG] в rmdir() и [EBUSY] в unlink(). Обсуждение [EXDEV] см. в разделе link() .

Будущие направления

См. также

link(), rmdir(), symlink(), unlink(), базовые определения том IEEE Std 1003.1-2001,

Как мне переименовать файл, который называется "Patient.txt", и я хочу, чтобы он назывался любым значением, хранящимся в строке "фамилия" после объединения строк. Я знаю, что мой код также изобилует небольшими ошибками и плохими практиками, которые я постараюсь исправить, однако я хочу решить проблему с именем ФАЙЛА.

Имя файла не меняется.

Количество неверных строковых аргументов как для scanf, так и для fprintf в этом коде превышает число правильных; много. Просто посмотрите на первые два вызова scanf. Один из них (почти) правильный. т.е. переименование — это наименьшая из ваших забот прямо сейчас.

Почему у вас есть второй printf("%s\n", fileName); после звонка переименовать? Вы ожидаете, что он напечатает что-то еще, кроме первого printf("%s\n", fileName); ? Кстати, в вашем коде правильный отступ.

Весь код работает правильно, хотя при запуске сохраняется только файл с исходным именем.

&name[25] и т. д. очень неверны. Это адрес следующего символа после буфера. Неопределенное поведение могло привести к повреждению ФАЙЛА *fbor, который уже был назначен.

2 ответа 2

Вы должны закрыть файл, прежде чем сможете переименовать его с помощью функции rename . Кажется, это ваша главная проблема в заданном вопросе. Кроме того, аргументы функции «rename» должны быть «const char*», что не относится к передаваемым вами переменным.

Примечание: в этом ядре вырезаны мелкие ошибки и плохие практики, но, поскольку вопрос не об этом, я не буду это комментировать.

Вы должны закрыть файл, прежде чем сможете переименовать его с помощью функции rename . В основном это ограничение только для Windows. Системы POSIX в целом позволяют не только переименовывать файл в любое время, но и удалять его, когда он открыт. Это очень полезная парадигма.

Я исправлю плохие методы, как только выясню это. Я никогда раньше не программировал, и это мое первое задание.Я fclosed(fbor) ниже последнего fprintf, и он все еще не переименовывается, и возникает ошибка, использованная в приведенном выше решении кода.

". Аргументы функции "rename" должны быть "const char*", что не относится к переменным, которые вы передаете" - это неправильно. const char * гарантирует, что функция переименования не будет использовать указатель на то, на что он указывает. OP может передать неквалифицированный символ * для переименования, и он будет работать отлично.

@BobJarvis-ReinstateMonica: передача указателя на тип с указанием const предполагает, что вызываемая функция не будет изменять объекты, на которые указывает указатель, через этот указатель. Это не гарантирует. Поскольку const был добавлен в C в конце его разработки, бывают ситуации, когда он обязательно удаляется вызываемой функцией, и это разрешено и определено стандартом C, если объект, на который указывает указатель, изначально не был определен с помощью const .

Удалить файл

Ниже приведены инструкции по переименованию файла, ярлыка или каталога. Щелкните одну из следующих ссылок, чтобы автоматически перейти к нужной операционной системе.

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

Как переименовать в Microsoft Windows

Пользователи Windows могут переименовывать свои файлы и каталоги одним из следующих способов. Мы перечислили следующие рекомендации, которые, по нашему мнению, являются самыми простыми способами переименования файла. Эти методы подходят для большинства типов файлов, включая текст, фотографии, документы и другие.

Это также работает для удаления пробелов в имени файла.

Переименование папки, содержащей файлы, может вызвать проблемы, если эта папка содержит файлы, необходимые программе. Например, если программа ищет папку с именем «данные» и вы переименовываете ее в «другие», программа больше не будет знать, где находятся файлы данных.

Первый способ

    файл или папку. файл с помощью мыши и выберите «Переименовать» в появившемся меню.

В Windows 11 выберите Показать дополнительные параметры в контекстном меню, чтобы увидеть параметр Переименовать.

Метод второй

  1. Выделите файл или папку.
  2. Нажмите клавишу F2 на клавиатуре.

Метод третий

  1. Выделите файл или папку.
  2. Нажмите «Файл» в верхней части окна и выберите «Переименовать» в списке доступных вариантов.

Проводник в Windows 11 не имеет меню файлов, как в предыдущих версиях Windows. Вместо этого щелкните значок "Переименовать" в строке меню вверху.

Метод четвертый

  1. Выделите файл или папку.
  2. После выделения подождите несколько секунд и снова щелкните имя файла. Вокруг имени файла или папки должна появиться рамка, и вы сможете переименовать файл.

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

Одновременное переименование нескольких файлов или папок

  1. Откройте Проводник.
  2. В проводнике выберите все файлы, которые вы хотите переименовать.
    1. Выбрав файлы, нажмите F2, чтобы изменить имя файла, и введите новое имя для файлов. Например, ввод «тест» переименовывает файлы в тест, тест (1), тест (2), тест (3) и т. д. Если у вас отображаются расширения файлов, обязательно введите имя расширения файла.< /li>

    Пользователи Microsoft Windows также могут переименовать любой файл с помощью командной строки Windows.

    Как переименовать в MS-DOS и командной строке Windows

    Пользователи командной строки MS-DOS и Windows (CMD) могут изменить имя файла или каталога с помощью команды ren или rename. Ниже приведены примеры использования этой команды. Дополнительную информацию о каждой из этих команд можно найти, щелкнув ссылки на команды выше.

    Переименование файла

    В следующем примере файл test.txt переименовывается в Hope.txt.

    Если файл test.txt не находится в вашем текущем каталоге, вы должны указать путь к файлу в качестве префикса к имени файла. Например, если файл находится в каталоге «компьютер», введите команду, аналогичную приведенной ниже.

    Переименование файла с пробелом

    Если в файле или каталоге есть пробел, он должен быть заключен в кавычки. В противном случае вы получите ошибку «Неверный синтаксис команды». Чтобы переименовать файл «computer Hope.txt» в «example file.txt», ваша команда должна выглядеть так, как показано в следующем примере.

    Переименование нескольких файлов одной командой

    Чтобы переименовать несколько файлов одновременно, вы должны использовать некоторую форму подстановочного символа. Ниже приведены примеры того, как это можно сделать.

    В следующем примере все файлы в текущем каталоге, заканчивающиеся на .rtf, переименовываются в файлы .txt.

    В следующем примере команда переименовывает файл с неизвестным символом в имени файла во что-то, что можно прочитать. "?" в следующем примере используется подстановочный знак для неизвестного символа.

    Переименование каталога

    Переименование каталога в MS-DOS очень похоже на переименование файла. Используйте команду ren или rename, чтобы переименовать каталог. Поскольку у вас не может быть файла и каталога с одинаковыми именами, вам не нужно беспокоиться об ошибочном переименовании файла вместо каталога. Единственным исключением является использование подстановочных знаков.

    Переименование каталога, содержащего файлы, может вызвать проблемы, если этот каталог содержит файлы, необходимые программе. Например, если программа ищет каталог с именем «данные» и вы переименовываете его в «другой», программа больше не будет знать, где находятся файлы данных.

    В следующем примере каталог компьютера переименовывается в Hope.

    Переименуйте каталог "computer Hope" в "каталог примеров". Всякий раз, когда вы имеете дело с файлом или каталогом с пробелом, он должен быть заключен в кавычки. В противном случае вы получите ошибку «Неверный синтаксис команды».

    Переименовать в пакетном файле

    Чтобы переименовать файлы в пакетном файле, вы можете использовать любую из команд переименования или примеров, показанных в разделе командной строки MS-DOS и Windows.

    Как переименовать в macOS

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

    Первая рекомендация

    В Finder macOS выберите файл, щелкнув файл один раз, а затем нажмите клавишу возврата на клавиатуре. Нажав клавишу возврата, введите новое имя файла.

    Вторая рекомендация

    Выберите файл или значок, который хотите переименовать. Нажмите и наведите указатель мыши на имя файла, пока оно не будет выделено. После выделения это означает, что файл можно переименовать.

    Третья рекомендация

    С помощью терминала вы также можете переименовать любой файл. Инструкции по переименованию файла с помощью команды mv см. в разделе для пользователей Linux и Unix.

    Как переименовать в командной строке Linux и Unix

    Для получения подробной информации о переименовании файлов в Linux см. команду Linux mv.

    Как переименовать в Google Chrome OS

    В ОС Google Chrome на Chromebook вы можете переименовывать файлы и каталоги одним из следующих способов. Мы перечислили следующие рекомендации, которые мы считаем самыми простыми способами переименования файла.

    Первая рекомендация

    Выделите файл, щелкнув его один раз. Нажмите Ctrl + Enter на клавиатуре и введите новое имя файла.

    Вторая рекомендация

    Щелкните файл правой кнопкой мыши, одновременно нажав двумя пальцами на сенсорной панели. В контекстном меню выберите "Переименовать" и введите новое имя файла.

    Читайте также: