| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Очистка содержимого файла |
| Автор: Джем 25.11.2004, 14:55 |
| Существует ли функция, чтоб осуществить сабж? Если открываю файл с параметром "w", новое содержимое пишется поверх старого. Но! Если новая переменная меньше чем старая переменная, конечный кусок старой переменной остается. |
| Автор: sergejzr 25.11.2004, 15:10 | ||
| http://forum.vingrad.ru/index.php?showtopic=21451 Вот тут мы разбирались с подобмым функцией
Можно просто укоротить файл на 0 |
| Автор: bel_nikita 25.11.2004, 16:01 | ||||
sergej.z
Плюс надо добавить библиотеку, в которой эта функция реализована Идея, такова: 1. Отрыть файл 2. Переместить поинтер, при помощи fseek(FILE*, offset, origin), которая очищает признак конца файла 3. Закрыть файл |
| Автор: Crait 25.11.2004, 17:36 | ||
|
| Автор: Джем 26.11.2004, 08:58 | ||
| Спасибо, что откликнулись, но функция эта, вообще никак не идет: и HANDLE, и GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE и прочие не нравятся моему компилятору. Может какую библиотеку нужно включить? bel_nikita
Не понял. Это может помочь вместо предлагаемой функции? Если да, то куда нужно переместить указатель, и каким образом очистить признак конца? |
| Автор: Adil' 26.11.2004, 10:12 | ||||||
|
| Автор: Джем 26.11.2004, 11:05 | ||
Adil'
То есть для TurboC не пойдет? И для чего твой код? Чтоб не было EOF? |
| Автор: Adil' 26.11.2004, 12:30 | ||||
open("file.ext",O_BINARY|O_CREAT|O_RDWR|O_TRUNC); с флагом O_TRUNC открывает файл и "урезает" его размер до нуля - то, что ты хотел. Там где, у меня "..." може смело писАть свою переменную - хвост не останется; размер файла будет равен размеру того, что ты запишешь на месте "...". |
| Автор: Джем 26.11.2004, 14:34 |
| Adil' Ничего от добавления этого кода не изменилось. Может я что не так делаю? А делаю я так: Сначала открываю файл для записи. Потом идет твой код. В месте "..." идет запись переменных в файл. Закрываю файл. |
| Автор: Mad 26.11.2004, 14:46 | ||
Этот код просто должен был сработать. Посмотри, может ты этот хвостик сам записываеш поновой ? покажи код, которым ты в файл пишеш. |
| Автор: Intro 26.11.2004, 16:05 |
| Зачем всё так сложно? просто запоминаешь имя файла, потом его удаляешь, потом создаешь поток с именем файла, вот и всё... ;) |
| Автор: smalcom 26.11.2004, 23:12 | ||
точно не помню приблизительно это выглядит так
и никакой извините за выражение траханины, если есть файл, то обнулица, если нету, то создасца пустой. |
| Автор: Джем 29.11.2004, 06:48 | ||||||
Напишу-ка я код всей функции. Функция производит изменения в файле fname, при этом используется временный файл "c:\disk.tmp". До функции изменения файлы открываются: первый - для чтения, второй - для записи.
Но, похоже, дело в чем-то другом. Делаю проверку. Отдельной функцией заношу данные в первый файл. Второго пока не существует. Выполняю функцию изменения. Смотрю результат: первый файл, как обычно... НО И во временном файле почему-то записаны не новые переменные, а такая же ерунда - новые поверх старых.
Каким образом можно удалить файл программно? |
| Автор: Adil' 29.11.2004, 14:19 | ||||
Что же ты в одну кучу намешал?
|
| Автор: Джем 30.11.2004, 07:12 | ||
Adil'
Да уж получилось масло масляное. А выяснилось, что если просматривать файл каким текстовым редактором, то там новые переменные записаны поверх старых и их конец остается, а если просматривать этот же файл программно, то все пучком - никакой лишней информации. Странно... Попробовал удалить файл unlink("c:\1.txt"). Таким образом не удаляет. |
| Автор: Adil' 1.12.2004, 11:19 | ||
|
| Автор: Джем 2.12.2004, 10:37 | ||
Ага |