Здравствуйте.
Есть необходимость скопировать файл, но есть и проблема.
Суть проблемы:
— есть специфичное клиент-серверное приложение, написанное по заказу сторонними разработчиками;
— исходников, естественно, нету;
— приложение использует неизвестный формат БД (один файл ~80 мб);
— сервер постоянно запущен и останавливать его крайне нежелательно, а уж о постоянных остановках и речи быть не может;
— недавно появилась необходимость бэкапить БД;
— когда я пытаюсь скопировать файл с базой данных, мне ОС пишет, что данный файл занят другим процессом;
— то же самое происходит, когда я пытаюсь создать поток TFileStream к этому файлу
Подскажите пожалуйста, можно ли прочитать такой файл из своей программы (это в идеале), или существуют ли какие-нибудь утилиты для копирования таких файлов?
Регистрация: 09.01.2008
Сообщений: 26,238
зависит от способа открытия БД.
Но, даже если файловая система и позволит это сделать — это будет НЕПРАВИЛЬНО.
Как удалить папку, если пишет, что она открыта в другой программе?
В момент копирования могут быть незавершённые транзакции — возможно (теоретически) получить битый набор данных.
Для начала попробуйте воспользоваться штатными средствами Backup’а данных, имеющихся в Вашей СУБД (впрочем, если это самописная БД — тогда всё намного хуже ).
p.s. кстати, попробуйте скопировать файл (или просмотреть файл по ALT-F3) в Far Commander. Если он не сумеет этого сделать, значит СУБД открыто в монопольном режиме и скопировать (без остановки процесса) не получится.
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
Для начала попробуйте воспользоваться штатными средствами Backup’а данных, имеющихся в Вашей СУБД (впрочем, если это самописная БД — тогда всё намного хуже ).
p.s. кстати, попробуйте скопировать файл (или просмотреть файл по ALT-F3) в Far Commander. Если он не сумеет этого сделать, значит СУБД открыто в монопольном режиме и скопировать (без остановки процесса) не получится.
Я подозреваю, что именно в монопольном режиме файл и открыт.
Собственно, я надеялся, что может быть есть возможность прочитать файловую систему (NTFS), найти все смещения для требуемого файла и побайтно считать его напрямую с жёсткого диска в обход операционки.
Такое, в принципе, возможно (т.е. есть такая физ. возможность и про это можно найти материалы в интернете)? Потому что, если не получится — то придётся изгаляться с ночными отключениями и запусками сервера приложений.
P.S. кстати, у меня ни разу нигде не ёкнуло, что могут остаться незавершённые транзакции. Большое спасибо за предупреждение.
Источник: www.programmersforum.ru
Как скопировать занятый файл
Иногда перемещение, удаление или переименование того или иного файла бывает невозможно осуществить, также это касается и копирования. Проблема может заключаться в том, что файл задействован в операционной системе какой-либо программой.
Как удалить файл открытый в system [БЕЗ ПРОГРАММ] [FULL Инструкция]

Статьи по теме:
- Как скопировать занятый файл
- Как скопировать System файл
- Как скопировать из архива
Инструкция
Проверьте, какой программой занят нужный вам файл. Особое внимание уделите программам, работающим в фоновом режиме, обычно они бывают свернуты в трей на панель задач в правом нижнем углу экрана. Также проверьте различные проигрыватели, редакторы, программы просмотра изображений и так далее. Также файл может быть занят параллельным копированием, перемещением или удалением.
Если файл, который вы хотите скопировать, является системным и обычно он задействован в работе Windows, выясните, какая из служб операционной системы его использует, и завершите ее работу. Вы можете выяснить это, выполнив поиск службы в интернете по названию нужного файла.
После этого запустите диспетчер задач Windows при помощи нажатия сочетания клавиш Shift+Ctrl+Esc или Alt+Ctrl+Delete, перейдите к запущенным на вашем компьютере процессам, найдите нужный в списке и нажмите на него правой кнопкой мыши. Выберите вариант «Завершить дерево процессов» в контекстном меню.
Обратите внимание, что данное действие может привести к завершению некоторых программ или работы всей операционной системы, поэтому предварительно выясните, что за собой влечет прекращение выполнения того или иного процесса.
Если нужный для копирования файл занят неизвестной вам программой, перезагрузите компьютер. Это может привести к тому, что результаты текущей работы не будут сохранены, однако файл, нужный для копирования, скорее всего, освободится.
Также, при частом возникновении такой ошибки, произведите полную проверку компьютера на наличие вирусов и вредоносных программ, обычно они задействуют определенные папки и файлы, мешая их удалению. Чаще выполняйте форматирование съемных накопителей и проверяйте память телефонов, плееров и других портативных устройств, на которых могут содержаться вирусы.
Совет полезен?
Статьи по теме:
- Как быстро скопировать файлы
- Как скопировать файл из одной папки в другую
- Как скопировать файлы xp
Добавить комментарий к статье
Похожие советы
- Как скопировать информацию
- Как узнать, чем занят файл
- Как в Bat скопировать файл
- Как перенести файлы из одной папки в другую
- Как использовать кинезис в Dead Space
- Как скопировать файл с заменой
- Как выгрузить программу
- Как ускорить копирование файлов
- Как скопировать текст, если он не копируется
- Как выгрузить процесс
- Как вырезать файл
- Как копировать файлы с компьютера
- Как копировать больше файлы
- Как скопировать папку Windows
- Как удалить дублирующиеся файлы
- Как копировать защищенный файл
- Как перенести папку с диска
- Как переписать защищенный диск
- Как скопировать файлы с жесткого диска
- Куда копируются файлы
- Как перенести «Мои документы» в Windows 7
- Горячие клавиши или как скопировать без мышки
- Как получить файлы
Источник: www.kakprosto.ru
Копирование заблокированных файлов с HoboCopy
Предположим, что вы хотите скопировать файл, который намертво заблокирован другой программой. В результате Windows нам радостно сообщит о том, что системный процесс не может получить доступа к файлу, поскольку последний заблокирован другим процессом. Как же тогда скопировать такой файл?
Что же мешает, собственно говоря, освободить файл, закрыв заблокировавшую его программу? Да ничего, но представьте, что вы настраиваете автоматическое резервное копирование файлов. Если файл заблокирован, то программа резервного копирования здесь не справится и нужный файл не будет скопирован. Вот тут-то и понадобится один рецепт, который представлен в этой статье.

Начиная с Windows XP операционная система от Microsoft поддерживает технологию теневого копирования (она же Volume Shadow Copy). Данная технология используется для резервного копирования данных и восстановления системы. В частности, теневая копия представляет собой временный “снимок” файла или раздела жесткого диска. При этом одна программа может получить доступ чтения именно к снимку, в то время как другие программы могут в это же время работать с файлом или изменять его.
Именно это нам и нужно – чтение занятого файла. И поможет нам в этом утилита для командной строки HoboCopy, предназначенная для резервного копирования файлов.
На следующей странице можно загрузить HoboCopy для Windows XP и Windows Vista/7 в версиях 32/64 бит:
- Скачать HoboCopy для различных версий Windows
Для работы HoboCopy (да и многих других программ для резервного копирования) нам надобятся две следующих службы Windows:
- Теневое копирование тома
- MS Software Shadow Copy Provider
Если вы забыли, где просмотреть службы, то в Windows 7 перейдите по пути Панель управления > Система и безопасность > Администрирование > Службы (а в Windows XP – Панель управления > Администрирование > Службы).
Убедитесь в том, что службы не отключены. Если для них указан режим запуска Вручную, то программа HoboCopy самостоятельно запустит эти службы, когда понадобится и отключит их по завершению своей работы.
Резервное копирование одного файла с помощью HoboCopy
Как вы помните, HoboCopy – утилита командной строки. К слову сказать, в Windows 7 и Windows Vista ее нужно запускать в режиме администратора, для чего щелкните на файле программы правой кнопкой мыши, выберите команду Свойства > Дополнительно и установите флажок Запуск от имени администратора. Также будет не лишним ознакомиться со статьей Запуск программ Windows 7 в режиме администратора.
Синтаксис команды выглядит следующим образом:
hobocopy c:имя_папки d:папка_копирования
К примеру, мы решили скопировать файл c:userswindatamailoutlook.pst прямо вот сюда: d:backupsoutlook.pst.
Команда будет выглядеть следующим образом:
hobocopy c:userswindatamail d:backups Outlook.pst
Резервное копирование каталога с помощью HoboCopy
Чем копировать по одному файлу, разумеется, куда лучше настроить резервное копирование целыми папками. Для этого нам понадобятся такие ключи:
- /full – копирование всех файлов
- /skipdenied – игнорировать любые сообщения ошибках, связанных с разрешением доступа
- /r – рекурсивное копирование
- /y – никаких запросов, копировать абсолютно все
Синтаксис команды следующий:
hobocopy /full /skipdenied /y /r c:имя_папки d:папка_копирования
Например, используя предыдущий пример, скопируем всю пользовательскую папку в папку d:backups. Для этого нам понадобится такая команда:
hobocopy /full /skipdenied /y /r c:userswindata d:backups
На копирование понадобится какое-то время, так что можно передохнуть, перекусить и потрещать вконтактике (шутка). Результатом станет полная копия всего каталога. Если при копировании были сообщения об ошибках, связанных с разрешением доступа, программа укажет на проблемные файлы.
Инкрементное копирование файлов с помощью HoboCopy
Утилита HoboCopy поддерживает и инкрементный тип копирования. Что это такое? Весьма полезная функция, она позволяет копировать только те файлы, что изменились с момента предыдущего резервного копирования. При этом последняя дата копирования хранится в файле, который вам нужно указать непосредственно в команде утилиты.
Для инкрементного копирования потребуются два ключа:
- /statefile=имя_файла – это имя файла, в котором будут записаны данные о последнем копировании
- /incremental – а это, как понятно из названия, ключ для инкрементного копирования
Синтаксис команды выглядит так:
hobocopy /incremental /statefile=имя_файла /y /r c:имя_папки d:папка_копирования
hobocopy /incremental /statefile=d:lastbackup.dat /y /r c:userswindata d:backups
Важно . При первом запуске программы необходимо указать ключ /full вместо /incremental, иначе будет выдано сообщение об ошибке, так как файл с данными о предыдущем состоянии еще не будет создан. А вот уже все последующие команды нужно указывать с ключом /incremental.
Таким образом, утилита HoboCopy позволяет настроить автоматическое копирование папок, для чего нужно лишь запланировать процедуру копирования. В Windows 7/Vista для этого используйте системную программу Планировщик заданий (Панель управления > Система и безопасность > Администрирование > Расписание выполнения задач), а в Windows XP – окно Назначенные задания (Панель управления > Назначенные задания).
Источник: windata.ru