Как скопировать толкьо структуру папок, без файлов?
К примеру имеется папка, в ней есть под папки, и в каждой из подпапок есть еще папки, а в них лежат файлы.
Вот как мне скопировать все кроме файлов? Т.е мне нужны толкьо пустые папки и подпапки в той же структуре, что и были но без файлов.
Дополнен 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Лучший ответ
xcopy d:\source\*.* d:\destination /t /e
где source — источник структуры папок, а destination — папка назначения, где будет создаваться пустая структура.
Подробнее — xcopy /?
Остальные ответы
написать прогу, которая будет это делать, по другому ни как
CeleronОракул (56743) 13 лет назад
Вы издиваетесь? А до меня никто до этог н едодумался? Например Total Commander?
CeleronОракул (56743) 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Скопировать все целиком, а файлы потом стереть.
CeleronОракул (56743) 13 лет назад
А у меня там инвы на 15 Гб. И места свободного столько нет. и времени на такое копирование кучи мелких файлов. Это минут 30 займет.
CeleronОракул (56743) 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Есть такая прога — Indexator — называетя, бесплатная поиши.
Создает хтмл-ку с деревом.
как функция называется в тотале?
Сергей ДмитриевЗнаток (259) 1 год назад

F5 + |*.*
Команда XCOPY — копирование файлов и каталогов.
Команда XCOPY используется для копирования файлов и каталогов с сохранением их структуры. По сравнению с командой COPY имеет более широкие возможности и является наиболее гибким средством копирования в командной строке Windows
Формат командной строки:
XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/EXCLUDE:файл1[+файл2][+файл3]. ]
Параметры командной строки:
источник — Копируемые файлы.
целевой_объект — Расположение или имена новых файлов.
/A — Копирование только файлов с установленным архивным атрибутом; сам атрибут при этом не изменяется.
/M — Копирование только файлов с установленным архивным атрибутом; после копирования атрибут снимается.
/D:m-d-y — Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.
/EXCLUDE:файл1[+файл2][+файл3]. — Список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.
/P — Вывод запросов перед созданием каждого нового файла.
/S — Копирование только непустых каталогов с подкаталогами.
/E — Копирование каталогов с подкаталогами, включая пустые. Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.
/V — Проверка размера каждого нового файла.
/W — Вывод запроса на нажатие клавиши перед копированием.
/C — Продолжение копирования вне зависимости от наличия ошибок.
/I — Если целевой объект не существует и копируется несколько файлов, считается, что целевой объект задает каталог.
/Q — Запрет вывода имен копируемых файлов.
/F — Вывод полных имен исходных и целевых файлов.
/L — Вывод имен копируемых файлов.
/G — Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.
/H — Копирование, среди прочих, скрытых и системных файлов.
/R — Перезапись файлов, предназначенных только для чтения.
/T — Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей /T /E.
/U — Копирование только файлов, уже имеющихся в целевом каталоге.
/K — Копирование атрибутов. При использовании команды XСOPY обычно сбрасываются атрибуты «Только для чтения».
/N — Использование коротких имен при копировании.
/O — Копирование сведений о владельце и данных ACL.
/X — Копирование параметров аудита файлов (подразумевает ключ /O).
/Y — Подавление запроса подтверждения на перезапись существующего целевого файла.
/-Y — Запрос подтверждения на перезапись существующего целевого файла.
/Z — Копирование сетевых файлов с возобновлением.
/B — Копирование символической ссылки вместо ее целевого объекта.
/J — Копирование с использованием небуферизованного ввода/вывода. Рекомендуется для очень больших файлов.
Ключ /Y можно установить через переменную среды COPYCMD.
Ключ /-Y командной строки переопределяет такую установку.
Примеры использования XCOPY
XCOPY /? — выдать краткую справку по использованию команды.
xcopy C:\users D:\copy1 — скопировать файлы из каталога C:\users в каталог D:\copy1 . Будет выполняться копирование без подкаталогов и только файлов без атрибутов «Скрытый» и «Системный». Для скопированных файлов будет установлен атрибут Архивный . Если каталог, в который выполняется копирование, не существует, то пользователю будет выдано сообщение:
Что означает D:\copy1:
имя файла или каталога
(F = файл, D = каталог)? D
После ответа D целевой каталог будет создан и копирование будет выполняться в D:\COPY1\. Для подавления запроса на создание целевого каталога используется параметр /I:
xcopy C:\users D:\copy1 /I
xcopy C:\users D:\copy1 /H /Y /C — копирование файлов, включая скрытые и системные, с подавлением запроса на перезапись существующих и возобновлением при ошибке. Если существующий в целевом каталоге файл имеет атрибут «Только чтение», то копирование не выполняется. Для перезаписи таких файлов используется ключ /R
xcopy C:\users D:\copy1 /H /Y /C /R /S — скопировать все файлы и подкаталоги ( /S ) с перезаписью существующих без запроса ( /Y ) , включая скрытые и системные. ( /H ) с перезаписью файлов с атрибутом «Только чтение» (/R) и игнорированием ошибок ( /C )
xcopy C:\users D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt — то же, что и в предыдущем случае, но текстовый файл C:\users\listnotcopy.txt задает признаки исключения из процедуры копирования. Пример содержимого файла:
\User1\ — исключить из копирования каталог C:\users\user1
All Users исключить из копирования каталог C:\users\All Users
de*.* — исключить из копирования все файлы и каталоги, начинающиеся на буквосочетание «de»
xcopy C:\users\*.exe D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt — то же, что и в предыдущем примере, но выполняется только копирование исполняемых файлов с расширением .exe .
xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I — копирование всех файлов с расширением .ini из каталога временных файлов в каталог D:\copy1\ini\ . Если целевой подкаталог \ini\ не существует, то он будет создан без запроса пользователю ( /I ) .
xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I /D:09-16-2013 — то же, что и в предыдущем примере, но выполняется копирование только тех файлов, у которых установлена дата изменения 16 сентября 2013 года и старше.
xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T — создать структуру папок диска C: в каталоге D:\copy1\LISTDIR . Копирование файлов не выполняется. Копируются только папки, включая пустые, скрытые и системные.
xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T /D:09-16-2013 воссоздать в каталоге D:\copy1\LISTDIR структуру папок диска C: , с датой изменения 16 сентября 2013 года и позже.
Для добавления новых файлов в каталоги и обновления существующих на более поздние версии, можно использовать команду REPLACE.
Копирование и перемещение файлов и папок
Файл или папку можно скопировать или переместить в другое место, перетаскивая их мышью, используя команды копирования и вставки, или с помощью комбинаций клавиш.
For example, you might want to copy a presentation onto a memory stick so you can take it to work with you. Or, you could make a back-up copy of a document before you make changes to it (and then use the old copy if you don’t like your changes).
Эти инструкции применимы как к файлам, так и к папкам. Копирование и перемещение файлов и папок выполняется одинаково.
Копирование и вставка файлов
- Выберите файл, который хотите скопировать, нажав на него.
- Нажмите правой кнопкой и выберите Копировать или нажмите Ctrl + C .
- Перейдите в папку, в которую нужно поместить копию файла.
- Click the menu button and pick Paste to finish copying the file, or press Ctrl + V . There will now be a copy of the file in the original folder and the other folder.
Перемещение файлов командами вырезания и вставки
- Выберите файл, который хотите переместить, нажав на него.
- Нажмите правой кнопкой и выберите Вырезать или нажмите Ctrl + X .
- Перейдите в ту папку, в которую нужно переместить файл.
- Click the menu button in the toolbar and pick Paste to finish moving the file, or press Ctrl + V . The file will be taken out of its original folder and moved to the other folder.
Копирование или перемещение файлов перетаскиванием
- Откройте менеджер файлов и перейдите в папку, содержащую файл, который нужно скопировать.
- Нажмите Nautilus в верхней панели и выберите Создать окно (или нажмите Ctrl + N ), чтобы открыть новое окно. В новом окне перейдите в папку, в которую нужно переместить или скопировать файл.
- Нажмите на файл и перетащите его из одного окна в другое. Файл будет перемещён , если целевая папка находится на том же устройстве, и скопирован , если целевая папка находится на другом устройстве. For example, if you drag a file from a USB memory stick to your Home folder, it will be copied, because you’re dragging from one device to another. Для принудительного копирования файла удерживайте при его перетаскивании нажатой клавишу Ctrl , а для принудительного перемещения — клавишу Shift .
You cannot copy or move a file into a folder that is read-only . Some folders are read-only to prevent you from making changes to their contents. You can change things from being read-only by changing file permissions .
Как, чем создать копию папок, но пустых? (1 онлайн
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.
CakeWorker
Друг киргиза-пришелец
10 Ноя 2002 10.038 5.303 113 Севера
Допустим, есть у меня пачка папок, где лежат FLAС’и и «конверчённые» из них MP3. До того как грохнуть ФЛАКи, нужно переместить МП3 для прослушать и измерить их общую ёмкость. Как сделать так, чтобы не создавать копию каждой папки по отдельности, а сделать в один раз всей пачкой?
Есть TotalCommander.
Tuvalu
Well-Known Member
18 Ноя 2011 639 400 63 www
Можете точнее описать задачу? А то в шапке написано «пустые папки», а в посте — наполненные флаками и мп3. Кстати, они расположены скопом или каждый формат в своей папке. А вообще-то, в Total C подобное делается «на раз».
Если я правильно понял вопрос, то можно сделать так: в Total C открыть директорию со всеми папками. Далее по Ctrl+B (замечательная команда!) формируете список всех файлов скопом. Сортируете файлы по типу, убиваете ненужные (флаки, надо полагать). Видимо, вначале нужно будет скопировать все папки в отдельное место (чтобы их названия были без «копия») и удаляете ненужное. Короче, сообразите сами, тут всё очевидно.
Последнее редактирование: 27 Сен 2019
CakeWorker
Друг киргиза-пришелец
10 Ноя 2002 10.038 5.303 113 Севера
в шапке написано «пустые папки», а в посте — наполненные флаками и мп3.
Ну да. Создать надо где-то в другом месте (не важно) ровно такую же структуру папок с такими же названиями, но пустые. либо с переносом туда только МП3 и не затрагивая ФЛАКи.
Короче, сообразите сами, тут всё очевидно.
Было б очевидно, я бы не заморачивался. Нет?
AlexLazer
Well-Known Member
26 Янв 2009 2.645 1.369 113 39 Russia, Stavropol soundprofi.ru
@CakeWorker, Я так думаю скопировать полные папки, потом поиском найти все флаки и грохнуть их.
Последнее редактирование: 28 Сен 2019
Gerain9
Well-Known Member
16 Окт 2006 2.820 1.996 113 Татарстан
@CakeWorker, если есть Total Commander то всё очень просто
Нажимаете копировать (F5), в появившемся окне во втором пустом поле написать |*.*
Мне лениво это писать, поэтому три символа я копирую из верхней стороки и только добавляю |
А вообще в Тотале неимоверно много функций и возможностей
Ваш браузер не может отобразить это видео.
Последнее редактирование: 28 Сен 2019
CakeWorker
Друг киргиза-пришелец
10 Ноя 2002 10.038 5.303 113 Севера
Я так думаю, скопировать полные папки, потом поиском найти все флаки и грохнуть их.
Во-первых, это слишком просто, банально и. тупо. Во-вторых, долго. В-третьих, будь это HDD — бог бы с ним, но лишние перезаписи на SSD мне нафик не нужны.
CakeWorker
Друг киргиза-пришелец
10 Ноя 2002 10.038 5.303 113 Севера
@Gerain9, ну вот — то, что нужно, супер.
Кстати.
Мне лениво это писать, поэтому три символа я копирую из верхней стороки и только добавляю |
Их (*.*) и копировать не надо — это набор есть в списке второй графки — достаточно ткнуться мышкой в стрелку справа.
Последнее редактирование: 28 Сен 2019
Gerain9
Well-Known Member
16 Окт 2006 2.820 1.996 113 Татарстан
@CakeWorker, как мало надо для счастья)))
А вообще изучить бы все возможности TC. давно мечтаю, всё времени не хватает. Но и так получается людей реально удивлять. Иногда
Gerain9
Well-Known Member
16 Окт 2006 2.820 1.996 113 Татарстан
@CakeWorker, погуглил- оказывается там вообще можно любую ересь написать, лишь бы не было похоже на реальный тип какого файла.
cvc написал, тоже так же срабатывает. Ну понятно почему.
Если написать например *mp3* то скопирует только мп3- без картинок, обложек и т.д. Иногда тоже так нужно.
Tuvalu
Well-Known Member
18 Ноя 2011 639 400 63 www
Ну да. Создать надо где-то в другом месте (не важно) ровно такую же структуру папок с такими же названиями, но пустые. либо с переносом туда только МП3 и не затрагивая ФЛАКи.
Короче, сообразите сами, тут всё очевидно.
Было б очевидно, я бы не заморачивался. Нет?
Т.к. вы сразу не написали, что лишние копирования нежелательны (SSD), то овтет для вас неактуален. Но я , всё же, объясню — для завершения мысли, так сказать.
1) Создаётся новый каталог . /New, в него копируются все папки со всеми файлами.
2) В новом каталоге /New выполняете команду Ctrl+B (Тотал командер), полученный список ВСЕХ файлов сортируете по расширению (нажать на Ext).
3) Скопом убиваете ненужные файлы с расширением.flac-и или любым иным.
4) Всё, финита — во всех папках из директории /New остались только нужные файлы. Структура всх папок осталась прежней.
Long
Well-Known Member
27 Фев 2008 16.366 13.949 113 Moscow WWW.LONG.RU
— Если нужно сохранить ВСЁ исходное, а сделать копию с нужными файлами (по расширению) —
то всё делается ващще в виндовом проводнике: по нужным папкам делаете поиск FLAC,
и в этом же окошке поиска — их удаляете в корзину.
После чего копируете оставшееся в другое место.
Потом всё возвращаете из корзины.
Вряд ли есть более простой способ.
Tuvalu
Well-Known Member
18 Ноя 2011 639 400 63 www
Long, финт с корзиной — очень остроумно, плюсую!
digilab2
Well-Known Member
19 Июн 2012 12.343 6.443 113 67 Москва www.skbprost.ru
-я не очень вьехал в проблему , создаете в тс (f7) новую папку с нужным названием , туда переносите (f6) все ваши мп3 или флаки(
отмечаются insert) вот и все
CakeWorker
Друг киргиза-пришелец
10 Ноя 2002 10.038 5.303 113 Севера
@digilab2, да не папка. написал же «пачка папок», «структура папок»!
всё же, объясню — для завершения мысли, так сказать.
1) Создаётся новый каталог . /New, в него копируются все папки со всеми файлами.
2) В новом каталоге /New выполняете команду Ctrl+B (Тотал командер), полученный список ВСЕХ файлов сортируете по расширению (нажать на Ext).
3) Скопом убиваете ненужные файлы с расширением.flac-и или любым иным.
4) Всё, финита — во всех папках из директории /New остались только нужные файлы. Структура всх папок осталась прежней.
Это элементарно, коллега. Т.е. это то, что сделал бы любой мало-мальски с TotalCommander (и типа того) знакомый. И вы снова описали способ, о котором я сказал, что он нежелателен из-за перезаписи и копирования ненужного контента туда-сюда.
Тогда как @Gerain9 предложил реально изящный и простой способ. И проблема решена.
Как скопировать папки без содержимого
Сообщения: 53036
Благодарности: 15396
| Конфигурация компьютера | |
| Процессор: AMD Ryzen 7 7800X3D | |
| Материнская плата: Gigabyte B650E Aorus Master | |
| Память: Kingston Fury Renegade DDR5-6000 32GB (2×16) | |
| HDD: Samsung SSD 850 PRO 256GB, 980 PRO 1TB | |
| Видеокарта: Gainward GeForce RTX 3080 追风 | |
| Блок питания: be quiet! Straight Power 11 650W | |
| Монитор: ASUS VG248QE 24″ | |
| ОС: Windows 10 Pro x64 | |
| Прочее: корпус Fractal Design Define R4 |
lexter-kn, почитайте в документации к SubInACL пример к опции /stringreplaceonoutput (там как раз описана ваша задача) и в этой теме некоторые замечания.
Сообщения: 5624
Благодарности: 936
XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W]
[/C] [/i] [/q] [/F] [/L] [/G] [/H] [/R] [/T] [/u]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/b]
[/EXCLUDE:файл1[+файл2][+файл3]. ]
ключ /O позволяет перенести данные с сохранением прав доступа. Я таким образом уже 2 года делаю доп. бекап данных с файлового сервера.
Плюс можно настроить ключами, чтобы он делал только инкрементное копирование, т.е. копировал только те файлы, которые изменились или добавились после последнего копирования.
Это сообщение посчитали полезным следующие участники:
Сообщения: 3487
Благодарности: 507
Недавно стояла такая же задача.
Воспользовался Ideal Migration. Устанавливал только на доноре.
Саму операцию проводил с нового сервера, заходя на донор по RDP (но можно просто перенести созданный файл конфигурации).
На обоих требуется отключить (временно) DEP.
Я переносил только юзеров с паролями, но остальные данные тоже возможно.
——-
Просьба обращаться на «ты».
Сообщения: 5624
Благодарности: 936
xcopy \\server\d$\BUH G:\Backups\BUH\ /D /E /C /F /H /R /Y /O
Вот и все дела. Скопирует все файлы в первый раз с сохранением структуры, прав доступа и т.д. Т.е. полная зеркальная копия.
Как скопировать толкьо структуру папок, без файлов?
К примеру имеется папка, в ней есть под папки, и в каждой из подпапок есть еще папки, а в них лежат файлы.
Вот как мне скопировать все кроме файлов? Т.е мне нужны толкьо пустые папки и подпапки в той же структуре, что и были но без файлов.
Дополнен 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Лучший ответ
xcopy d:\source\*.* d:\destination /t /e
где source — источник структуры папок, а destination — папка назначения, где будет создаваться пустая структура.
Подробнее — xcopy /?
Остальные ответы
написать прогу, которая будет это делать, по другому ни как
CeleronОракул (56743) 13 лет назад
Вы издиваетесь? А до меня никто до этог н едодумался? Например Total Commander?
CeleronОракул (56743) 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Скопировать все целиком, а файлы потом стереть.
CeleronОракул (56743) 13 лет назад
А у меня там инвы на 15 Гб. И места свободного столько нет. и времени на такое копирование кучи мелких файлов. Это минут 30 займет.
CeleronОракул (56743) 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Есть такая прога — Indexator — называетя, бесплатная поиши.
Создает хтмл-ку с деревом.
как функция называется в тотале?
Сергей ДмитриевЗнаток (259) 1 год назад

F5 + |*.*
Копирование и перемещение файлов и папок
Файл или папку можно скопировать или переместить в другое место, перетаскивая их мышью, используя команды копирования и вставки, или с помощью комбинаций клавиш.
For example, you might want to copy a presentation onto a memory stick so you can take it to work with you. Or, you could make a back-up copy of a document before you make changes to it (and then use the old copy if you don’t like your changes).
Эти инструкции применимы как к файлам, так и к папкам. Копирование и перемещение файлов и папок выполняется одинаково.
Копирование и вставка файлов
- Выберите файл, который хотите скопировать, нажав на него.
- Нажмите правой кнопкой и выберите Копировать или нажмите Ctrl + C .
- Перейдите в папку, в которую нужно поместить копию файла.
- Click the menu button and pick Paste to finish copying the file, or press Ctrl + V . There will now be a copy of the file in the original folder and the other folder.
Перемещение файлов командами вырезания и вставки
- Выберите файл, который хотите переместить, нажав на него.
- Нажмите правой кнопкой и выберите Вырезать или нажмите Ctrl + X .
- Перейдите в ту папку, в которую нужно переместить файл.
- Click the menu button in the toolbar and pick Paste to finish moving the file, or press Ctrl + V . The file will be taken out of its original folder and moved to the other folder.
Копирование или перемещение файлов перетаскиванием
- Откройте менеджер файлов и перейдите в папку, содержащую файл, который нужно скопировать.
- Нажмите Nautilus в верхней панели и выберите Создать окно (или нажмите Ctrl + N ), чтобы открыть новое окно. В новом окне перейдите в папку, в которую нужно переместить или скопировать файл.
- Нажмите на файл и перетащите его из одного окна в другое. Файл будет перемещён , если целевая папка находится на том же устройстве, и скопирован , если целевая папка находится на другом устройстве. For example, if you drag a file from a USB memory stick to your Home folder, it will be copied, because you’re dragging from one device to another. Для принудительного копирования файла удерживайте при его перетаскивании нажатой клавишу Ctrl , а для принудительного перемещения — клавишу Shift .
You cannot copy or move a file into a folder that is read-only . Some folders are read-only to prevent you from making changes to their contents. You can change things from being read-only by changing file permissions .
Копирование или перемещение сообщения или папки
Клиент может использовать один из четырех методов для копирования или перемещения сообщения или папки:
- IMAPIFolder::CopyFolder
- IMAPIFolder::CopyMessages
- IMAPIProp::CopyTo
- IMAPIProp::CopyProps
Установив соответствующие флаги и параметры, copyTo и CopyProps можно заставить работать так же, как CopyFolder или CopyMessages. При принятии решения о том, какой метод следует вызывать, учитывайте следующие проблемы:
- Копируете или перемещаете папку или сообщение?
- Сколько вы знаете о папке или сообщении для перемещения или копирования?
- Сколько свойств папки или сообщения будет перемещено или скопировано?
Методы IMAPIProp можно использовать для копирования или перемещения папки или сообщения. IMAPIFolder::CopyMessages работает только с сообщениями; IMAPIFolder::CopyFolder работает только с папками.
В то время как использование методов IMAPIFolder не требует каких-либо знаний о свойствах, поддерживаемых папкой или сообщением для копирования или перемещения, необходимо иметь некоторые знания, чтобы использовать методы IMAPIProp . При использовании IMAPIProp::CopyProps необходимо явно указать, какие свойства папки или сообщения нужно скопировать или переместить. В IMAPIProp::CopyTo, если вы не хотите копировать или перемещать все свойства, необходимо явно указать, какие из них следует исключить. Дополнительные сведения об этих методах см. в разделе Копирование свойств MAPI.
Количество свойств для копирования или перемещения может повлиять на решение о том, какой метод следует использовать. При копировании или перемещении нескольких сообщений вызовите IMAPIFolder::CopyMessages. Другой вариант — вызвать IMAPIProp::CopyProps , чтобы скопировать только свойство PR_CONTAINER_CONTENTS папки (PidTagContainerContents). В следующей процедуре показано, как использовать CopyMessages.
Копирование или перемещение одного или нескольких сообщений
- Найдите допустимые идентификаторы записей для исходной и целевой папок.
- Откройте эти папки в режиме чтения и записи, вызвав IMAPISession::OpenEntry или IMsgStore::OpenEntry и задав флаг MAPI_MODIFY.
- Убедитесь, что указатель интерфейса, возвращаемый из OpenEntry , является указателем интерфейса IMAPIFolder . Если нет, приведите его к типу LPMAPIFOLDER.
- Создайте массив идентификаторов записи, представляющих одно или несколько сообщений для копирования или перемещения.
- Вызовите IMAPIFolder::CopyMessages со следующими флагами:
- MESSAGE_MOVE, если вы хотите выполнить операцию перемещения.
- MESSAGE_DIALOG и передайте дескриптор окна в параметре ulUIParam , если вы хотите, чтобы папка отображала индикатор хода выполнения.
- Отпустите указатели IMAPIFolder для исходной и целевой папок.
Если вы хотите скопировать полное содержимое папки в другую папку, вызовите метод IMAPIFolder::CopyFolder исходной папки или IMAPIProp::CopyTo .
Чтобы скопировать несколько свойств папки, вызовите ее метод IMAPIProp::CopyProps . Чтобы скопировать большую часть свойств папки, вызовите IMAPIProp::CopyTo.
Например, если вы хотите скопировать свойства PR_DISPLAY_NAME папки (PidTagDisplayName) и PR_COMMENT (PidTagComment), у вас есть следующие параметры:
- Вызовите IMAPIFolder::CopyFolder , чтобы скопировать все свойства папки, а затем удалить ненужные свойства из новой папки.
- Вызовите CopyTo и исключите все свойства папки, кроме PR_DISPLAY_NAME и PR_COMMENT.
- Вызовите CopyProps, передав PR_DISPLAY_NAME и PR_COMMENT в массиве include.
В этом случае copyProps является лучшим выбором, так как он предназначен для копирования небольшого набора свойств и является самым простым вызовом для реализации.
Чтобы скопировать или переместить только свойства папки, не включая сообщения, вызовите метод IMAPIProp::CopyTo папки и исключите следующие свойства:
- PR_CONTAINER_CONTENTS (PidTagContainerContents)
- PR_FOLDER_ASSOCIATED_CONTENTS (PidTagFolderAssociatedContents)
Методы копирования могут возвращать S_OK, указывающие на общий успех, MAPI_W_PARTIAL_COMPLETION, частичный успех или ошибку. Если возвращается MAPI_W_PARTIAL_COMPLETION, используйте макрос HR_FAILED для доступа к более конкретной ошибке. Дополнительные сведения см. в разделе Использование макросов для обработки ошибок.
Если вы копируете сообщения из одного хранилища сообщений в другое и юникод не поддерживается обоими, имейте в виду, что информация может быть потеряна из-за преобразования кодовой страницы. Обычно невозможно узнать, поддерживают ли хранилища сообщений один или оба формата, поэтому невозможно определить, следует ли копировать свойства текста в виде строк ASCII или в виде строк Юникода. Если вы поддерживаете Юникод, попробуйте выполнить копирование Юникода. В случае сбоя со значением ошибки MAPI_E_BAD_CHARWIDTH, прибегите к ASCII.