Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2015, 15:18   #1
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию C/C++ вырезать часть данных с файла

Здравствуйте.

Есть ли в C/C++ функции, которые помогут вырезать часть данных с файла?

Да и вообще, как это корректно делать методами C и методами C++?

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

Последний раз редактировалось Krasiosoft; 25.07.2015 в 15:29.
Krasiosoft вне форума Ответить с цитированием
Старый 25.07.2015, 15:40   #2
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Здравствуйте.

Есть ли в C/C++ функции, которые помогут вырезать часть данных с файла?

Да и вообще, как это корректно делать методами C и методами C++?

Заранее благодарен.
В С++, нет возможности вырезать содержимое, связи с этим, создаётся новый временный файл, что Вы наверняка видели миллион раз, когда это делают другие проги... например хром при скачивании. Если Вам нужно постоянно вырезать, то лучше обрабатывайте память, диск и без того очень медленный компонент
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 25.07.2015, 15:47   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как это корректно делать методами C и методами C++?
Получить размер файла, вычесть размер вырезаемого.
Зарезервировать в памяти массивчик.
Считать до вырезаемого, перескочить на конец вырезаемого
Считать остальное.
Переписать файл.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.07.2015, 16:12   #4
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Я пока тоже вижу 2 варианта:

1) Создаем временный файл, в него переписываем все содержимое кроме того, что нужно вырезать, удаляем файл и переименовываем временный.
2) Смещаем данные внутри файла, затирая данные, которые нужно вырезать и после этого уменьшаем размер файла на размер вырезаемых данных.

Но как будет правильнее делать?

И я пока не могу найти как в с/с++ уменьшить размер файла.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 25.07.2015, 16:19   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но как будет правильнее делать?
Зависит от размера файла. Если маленький - переписать его в память. Если большой сразу писать в временный файл поблочно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.07.2015, 16:27   #6
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Я пока тоже вижу 2 варианта:
2) Смещаем данные внутри файла, затирая данные, которые нужно вырезать и после этого уменьшаем размер файла на размер вырезаемых данных.
Не получиться, Вы не сможете оценить нужный размер блока, для чтения и последующей записи в другой позиции, и это очень сложный алгоритм, в условиях дешевезны пространства диска.

Узнать размер функции fseek, ftell, последней получите позицию ввиде числа.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 25.07.2015, 16:46   #7
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
Не получиться, Вы не сможете оценить нужный размер блока, для чтения и последующей записи в другой позиции
Там ничего сложного нету, чтоб переместить данные с одного места файла в другое. Я вот другое не могу найти, как методами с/с++ уменьшить размер самого файла после сдвига.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 25.07.2015, 16:50   #8
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Там ничего сложного нету, чтоб переместить данные с одного места файла в другое. Я вот другое не могу найти, как методами с/с++ уменьшить размер самого файла после сдвига.
Теперь Вы понимаете, что файл и работа с ними, это не память. Файловая система имеет свои ограничения.
Так что, метод предложенный модератором, Вам подойдёт
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 25.07.2015, 22:31   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
как методами с/с++ уменьшить размер самого файла после сдвига.
Ищите функцию truncate()
waleri на форуме Ответить с цитированием
Старый 25.07.2015, 22:50   #10
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Видел эту функцию, но она вроде есть только под MinGW.

Visual Studio не видит unistd.h.

Нужна стандартная функция C/C++, которая будет в любом компиляторе.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вырезать часть строки влад1991 Общие вопросы Delphi 8 14.04.2013 00:34
Flash Вырезать часть изображения demon112 Общие вопросы Web 1 09.04.2013 15:54
Как вырезать часть изображения ZelenuiBeret Visual C++ 0 27.01.2013 23:52
Вырезать часть строки montreyka Общие вопросы Delphi 4 26.03.2012 22:40
Вырезать часть строки. sergeyrulit Общие вопросы Delphi 2 22.10.2010 22:25