Как очистить файл в с
Перейти к содержимому

Как очистить файл в с

  • автор:

Как очистить файл в с

Нравится ресурс?

Правила раздела 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.

Если удаляемого файла не существует, исключение не создается.

Список распространенных задач ввода-вывода см. в разделе Общие задачи ввода-вывода.

Трюк в командной строке — Очистить содержимое файла

Очистить файл в Linux

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

> myfile.txt

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

Очистить файл в Linux

Очистка содержимого файла с использованием sudo

Описанный выше способ не работает, если вам нужно использовать sudo, то есть очистить файл от имени суперпользователя.

Для очистки файла с использованием sudo можно использовать команду:

sudo truncate -s 0 myfile.txt

Очистить файл в Linux через sudo

Еще несколько способов

Есть множество способов, с помощью который можно очистить содержимое файла, используя командную строку 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. Закрыть файл

user posted image

— регистрация доменов от 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 (ссылка) | (нет голосов) Загрузка .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *