Доброе время суток, soldier! VC++6.0 Ответ отправлен: 22.09.2002, 14:37 Отправитель: vitya Отвечает Biv
Добрый день, soldier! Понятное дело, что написан он не на Барсике а на С++ ,ну и скорее всего на VC++ Ответ отправлен: 22.09.2002, 14:39 Отправитель: Biv Отвечает Zloy
Добрый день, soldier! Прдположу, что как и все их продукты на С++ (ну может быть на С).
Ответ отправлен: 23.09.2002, 11:57 Отправитель: Zloy Отвечает Jadd
Добрый день, soldier! Топором рублен :))). А какое это принципиальное имеет значение? Я знавал людей, которые и на Tcl/Tk проги ваяли и что? IIS скорее на сях и писан. Универсальнее язык трудно найти. Ответ отправлен: 23.09.2002, 13:28 Отправитель: Jadd
Вопрос № 239
Уважаемые экспетры, возник следующий вопрос: Как программно можно удалить байт/несколько байт из файла? Какие существуют алгоритмы и где можно ознакомиться с их реализацией? Спасибо.
Добрый день, Подбельский В.К.! Необходимо просто читать по симвально файл и пропускать необходимые символы создавая копию файла! Ответ отправлен: 22.09.2002, 17:22 Отправитель: Kiss Отвечает Biv
Приветствую Вас, Подбельский В.К.! Простейший вариант такой. Допустим тебе нужно удалить 10-ый байт (или с 10-го по 20-ый, это не принципиально). Получаем бинарный доступ к файлу, например так: #include // Файл с функциями доступа к ф-лу #include // Константы "O_RDWR","O_BINARY" ......... int fHandle1 = open("blabla.fil", O_RDWR, O_BINARY)); Создаешь временный файл (примерно так же). Читаешь функцией read(fHandle1, buffer, 9) (типа девять байт которые у тебя останутся) Записываешь buffer функцией write(FHandle2, buffer, 9) Затем смещаешь файловый указатель функцией lseek(fHandle1, nbyte) (nbyte - кол-во байт от которых ты хочешь избавиться) И все остальное запихиваешь (кол-во всего остального можно посчитать, зная размер файла с помощью ф-ции чтения размера файла(filesize(int)),
так: filesize(fhandle) - nbyte - 9, напомню, что 9 - это условное значение - это число байт до первого удаляемого символа). Ну а как запихнуть все это в файл нетрудно догадаться. С уважением, Biv
Ответ отправлен: 22.09.2002, 23:31 Отправитель: Biv Отвечает E$h@
Добрый день, Подбельский В.К.! Честно говоря не понял вопрос! Как можно удалить байт? В смысле затереть его (тогда просто пиши в тот байт ноль) или чтобы ещё размер файла уменьшить на этот байт (тогда надо думать ГОЛОВНЫМ мозгом у меня с ходу 3 мысли возникли, а вам слабо :)??? Вобщем желаю удачи Ответ отправлен: 23.09.2002, 15:56 Отправитель: E$h@ Отвечает Zloy
Доброе время суток, Подбельский В.К.! Если я правильно понял, нужно считать файл по-байтово в память, просто переписать эти байты и сохранить файл. Вообщем не очень понятно, что надо... Ответ отправлен: 23.09.2002, 11:56 Отправитель: Zloy Отвечает Yuri Gordienko
Здравствуйте, Подбельский В.К.! Никакого специального метода нет, т.к. все делается просто: читаешь файл в буфер и пишешь обратно исключая ненужные тебе куски. Фактически все реализуется через fopen,fread,fwrite,fclose Ответ отправлен: 23.09.2002, 12:13 Отправитель: Yuri Gordienko Отвечает vitya
Приветствую Вас, Подбельский В.К.! Насколько я могу судить алгоритм - прочитать файл до конца (кусками или полностью) начиная с конца стираемой последовательности и записать его с ее (последовательности) начала, вас не устраивает. Для системы Windows могу предложить метод, который будет по всей видимости работать быстрее: создайте memory mapping - вызовите memcpy(), сработает быстрее.
Ответ отправлен: 23.09.2002, 13:00 Отправитель: vitya Отвечает Jadd
Добрый день, Подбельский В.К.! стандартными процедурами работы с фалами и файловыми потоками, типа fseek, fput(c, s, wc, ws), fgets, fwrite, fread - все это из стандартного сишного набора прототипов функций в stdio.h . Плохо язык учите, товарищ
Ответ отправлен: 23.09.2002, 13:20 Отправитель: Jadd Отвечает Pablo
Доброе время суток, Подбельский В.К.! Мне на ум навскидку только один алгоритм приходит, нужно установить указатель на то место откуда начинается информация, которую удалять не надо и которая идет после той, которую нужно удалить. Считать с этого места файл в память, установить указатель на начало места для удаления байтов и записать на то место информацию, которая была считана в память. Файл должен быть при этом открыт на чтение и запись. Ответ отправлен: 24.09.2002, 20:04 Отправитель: Pablo
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.