Как очистить файл в с
Нравится ресурс?
Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.
File. Delete(String) Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Удаляет указанный файл.
public: static void Delete(System::String ^ path);
public static void Delete (string path);
static member Delete : string -> unit
Public Shared Sub Delete (path As String)
Параметры
Имя файла, предназначенного для удаления. Подстановочные знаки не поддерживаются.
Исключения
платформа .NET Framework и .NET Core версий старше 2.1: path строка нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().
path имеет значение null .
Указан недопустимый путь (например, он ведет на несопоставленный диск).
Указанный файл используется.
Для файла имеется открытый дескриптор, а операционной системой является Windows XP или более ранней версии. Этот открытый дескриптор может быть результатом перечисления каталогов и файлов. Дополнительные сведения см. в разделе Практическое руководство. Перечисление каталогов и файлов.
Параметр path задан в недопустимом формате.
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
У вызывающего объекта отсутствует необходимое разрешение.
Файл является исполняемым файлом, который уже используется.
path является каталогом.
Параметр path указывает файл только для чтения.
Примеры
В следующем примере группы файлов копируются в папку резервного копирования C:\archives\2008, а затем удаляются из исходной папки.
string sourceDir = @"c:\current"; string backupDir = @"c:\archives\2008"; try < string[] picList = Directory.GetFiles(sourceDir, "*.jpg"); string[] txtList = Directory.GetFiles(sourceDir, "*.txt"); // Copy picture files. foreach (string f in picList) < // Remove path from the file name. string fName = f.Substring(sourceDir.Length + 1); // Use the Path.Combine method to safely append the file name to the path. // Will overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true); >// Copy text files. foreach (string f in txtList) < // Remove path from the file name. string fName = f.Substring(sourceDir.Length + 1); try < // Will not overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName)); >// Catch exception if the file was already copied. catch (IOException copyError) < Console.WriteLine(copyError.Message); >> // Delete source files that were copied. foreach (string f in txtList) < File.Delete(f); >foreach (string f in picList) < File.Delete(f); >> catch (DirectoryNotFoundException dirNotFound)
let sourceDir = @"c:\current" let backupDir = @"c:\archives\2008" try let picList = Directory.GetFiles(sourceDir, "*.jpg") let txtList = Directory.GetFiles(sourceDir, "*.txt") // Copy picture files. for f in picList do // Remove path from the file name. let fName = f.Substring(sourceDir.Length + 1) // Use the Path.Combine method to safely append the file name to the path. // Will overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true) // Copy text files. for f in txtList do // Remove path from the file name. let fName = f.Substring(sourceDir.Length + 1) try // Will not overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName)) // Catch exception if the file was already copied. with | :? IOException as copyError -> printfn $"" // Delete source files that were copied. for f in txtList do File.Delete f for f in picList do File.Delete f // Catch exception if the file was already copied. with | :? DirectoryNotFoundException as dirNotFound -> printfn $""
Dim sourceDir As String = "c:\current" Dim backupDir As String = "c:\archives\2008" Try Dim picList As String() = Directory.GetFiles(sourceDir, "*.jpg") Dim txtList As String() = Directory.GetFiles(sourceDir, "*.txt") ' Copy picture files. For Each f As String In picList 'Remove path from the file name. Dim fName As String = f.Substring(sourceDir.Length + 1) ' Use the Path.Combine method to safely append the file name to the path. ' Will overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), True) Next ' Copy text files. For Each f As String In txtList 'Remove path from the file name. Dim fName As String = f.Substring(sourceDir.Length + 1) Try ' Will not overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName)) ' Catch exception if the file was already copied. Catch copyError As IOException Console.WriteLine(copyError.Message) End Try Next For Each f As String In txtList File.Delete(f) Next For Each f As String In picList File.Delete(f) Next Catch dirNotFound As DirectoryNotFoundException Console.WriteLine(dirNotFound.Message) End Try
Комментарии
Укажите имя файла с любыми относительными или абсолютными сведениями о пути для path параметра . Подстановочные знаки не могут быть включены. Относительные сведения о пути интерпретируются как относительные относительно текущего рабочего каталога. Сведения о том, как получить текущий рабочий каталог, см. в разделе GetCurrentDirectory.
Если удаляемого файла не существует, исключение не создается.
Список распространенных задач ввода-вывода см. в разделе Общие задачи ввода-вывода.
Трюк в командной строке — Очистить содержимое файла

Чтобы очистить содержимое файла, не удаляя самого файла, можно использовать следующую команду:
> myfile.txt
В результате выполнения данной команды содержимое файла myfile будет очищено, и мы получим пустой файл.

Очистка содержимого файла с использованием sudo
Описанный выше способ не работает, если вам нужно использовать sudo, то есть очистить файл от имени суперпользователя.
Для очистки файла с использованием sudo можно использовать команду:
sudo truncate -s 0 myfile.txt

Еще несколько способов
Есть множество способов, с помощью который можно очистить содержимое файла, используя командную строку Linux. Вот некоторые из них:
echo -n "" > myfile.txt
: > myfile.txt
true > myfile.txt
cat /dev/null > myfile.txt
cp /dev/null > myfile.txt
dd if=/dev/null of=myfile.txt
Будьте внимательны при использовании команд, которые очищают содержимое файлов, чтобы случайно не удалить нужные данные. Не забывайте делать резервные копии.
Как очистить файл в с
Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )
Репутация: 21
Всего: 47
sergej.z
| Цитата |
| Вот тут мы разбирались с подобмым функцией |
| Код |
| int truncate (const char*filename, off_t length); |
Плюс надо добавить библиотеку, в которой эта функция реализована
Идея, такова:
1. Отрыть файл
2. Переместить поинтер, при помощи fseek(FILE*, offset, origin), которая очищает признак конца файла
3. Закрыть файл

— регистрация доменов от 150 руб.
| Дата 25.11.2004, 17:36 (ссылка) | (нет голосов) Загрузка . |
Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003
Репутация: нет
Всего: 1
| Код |
| int truncate(const char *fname, int distance) int i = -1; HANDLE hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL); |
if (hFile != INVALID_HANDLE_VALUE)
if (SetFilePointer(hFile, distance, NULL, FILE_BEGIN) != 0xFFFFFFFF)
if (SetEndOfFile(hFile))
i = 0;
>
| Дата 26.11.2004, 08:58 (ссылка) | (голосов: 0) Загрузка . |
Спасибо, что откликнулись, но функция эта, вообще никак не идет: и HANDLE, и GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE и прочие не нравятся моему компилятору. Может какую библиотеку нужно включить?
| Цитата(bel_nikita @ 25.11.2004, 16:01) |
| Идея, такова: 1. Отрыть файл 2. Переместить поинтер, при помощи fseek(FILE*, offset, origin), которая очищает признак конца файла 3. Закрыть файл |
Не понял. Это может помочь вместо предлагаемой функции? Если да, то куда нужно переместить указатель, и каким образом очистить признак конца?
| Дата 26.11.2004, 10:12 (ссылка) | (нет голосов) Загрузка . |
Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер
Репутация: 6
Всего: 15
| Цитата |
| Спасибо, что откликнулись, но функция эта, вообще никак не идет: и HANDLE, и GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE и прочие не нравятся моему компилятору. Может какую библиотеку нужно включить? |
Это он тебе для виндвс написал
| Цитата |
| Не понял. |
bel_nikita, я тоже не понял, что значит «fseek(FILE*, offset, origin), которая очищает признак конца файла»
| Код |
| #include #include |
| Дата 26.11.2004, 11:05 (ссылка) | (голосов: 0) Загрузка . |
| Цитата |
| Это он тебе для виндвс написал |
То есть для TurboC не пойдет?
И для чего твой код? Чтоб не было EOF?
| Дата 26.11.2004, 12:30 (ссылка) | (нет голосов) Загрузка . |
Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер
Репутация: 6
Всего: 15
| Цитата |
| То есть для TurboC не пойдет? |
| Цитата |
| И для чего твой код? Чтоб не было EOF? |
Причем тут EOF?
open(«file.ext»,O_BINARY|O_CREAT|O_RDWR|O_TRUNC); с флагом O_TRUNC открывает файл и «урезает» его размер до нуля — то, что ты хотел. Там где, у меня «. » може смело писАть свою переменную — хвост не останется; размер файла будет равен размеру того, что ты запишешь на месте «. «.
| Дата 26.11.2004, 14:34 (ссылка) | (голосов: 0) Загрузка . |
Adil’
Ничего от добавления этого кода не изменилось. Может я что не так делаю? А делаю я так:
Сначала открываю файл для записи. Потом идет твой код. В месте «. » идет запись переменных в файл. Закрываю файл.
| Дата 26.11.2004, 14:46 (ссылка) | (нет голосов) Загрузка . |
Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса
Репутация: 7
Всего: 19
| Цитата |
| Ничего от добавления этого кода не изменилось. Может я что не так делаю? |
Этот код просто должен был сработать.
Посмотри, может ты этот хвостик сам записываеш поновой ?
покажи код, которым ты в файл пишеш.
| Дата 26.11.2004, 16:05 (ссылка) | (голосов: 0) Загрузка . |
Зачем всё так сложно?
просто запоминаешь имя файла, потом его удаляешь, потом создаешь поток с именем файла, вот и всё. 😉
| Дата 26.11.2004, 23:12 (ссылка) | (нет голосов) Загрузка . |
Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr
Репутация: нет
Всего: 7
точно не помню приблизительно это выглядит так
| Код |
| open(fd, «filename», O_EXIST | O_TRUNC /*далее по вкусу | O_WRONLY или | O_RDWR*/) |
и никакой извините за выражение траханины, если есть файл, то обнулица, если нету, то создасца пустой.
| Дата 29.11.2004, 06:48 (ссылка) | (голосов: 0) Загрузка . |
| Цитата(Mad @ 26.11.2004, 14:46) |
| покажи код, которым ты в файл пишеш. |
Напишу-ка я код всей функции. Функция производит изменения в файле fname, при этом используется временный файл «c:\disk.tmp». До функции изменения файлы открываются: первый — для чтения, второй — для записи.
| Код |
| change_info() int k; char change; while (fread(&disk,sizeof(disk),1,f)) clrscr(); printf(«Name of disk — %s\n»,disk.name); printf («Singer — %s\n»,disk.singer); printf («Category of disk — %s\n»,disk.category); printf («Cost (tenge)- %s\n»,disk.cost); puts («\nTo change disk information press \»C\»»); puts(«To go to the next disk press any key»); for (;;) change=toupper(getch()); if (change!=’C’) else clrscr(); puts(«Name of disk»); scanf(«%s»,&disk.name); puts («Singer»); scanf(«%s»,&disk.singer); puts («Category of disk»); scanf(«%s»,&disk.category); puts («Cost (tenge)»); scanf(«%s»,&disk.cost); if ((fwrite(&disk,sizeof(disk),1,t))==0) puts(«Error of writing information in file»); getch(); exit(0); > break; > > > fclose(f); f=fopen(fname,»w»); fclose(t); t=fopen(«c:\disk.tmp»,»r»); |
Но, похоже, дело в чем-то другом. Делаю проверку. Отдельной функцией заношу данные в первый файл. Второго пока не существует. Выполняю функцию изменения. Смотрю результат: первый файл, как обычно. НО И во временном файле почему-то записаны не новые переменные, а такая же ерунда — новые поверх старых.
| Цитата(Intro @ 26.11.2004, 16:05) |
| потом его удаляешь |
Каким образом можно удалить файл программно?
| Дата 29.11.2004, 14:19 (ссылка) | (нет голосов) Загрузка . |