Я хочу преобразовать из использования shfileoperation в ifileoperation , но для каждого файла для каждого файла требуется ifileoperation . Я не хочу создавать фактические iShellitem s, потому что я хочу, чтобы оболочка обрабатывала случаи ошибок, в которых они не существуют, и отображает соответствующий пользовательский интерфейс. Я могу предоставить ifilesystembinddata ShcreateitemfromsingName через контекст Bind, но насколько точным должен быть его результат? Например, если я не знаю, относится ли путь к файлу или каталогу, какими должны быть его атрибуты? А как насчет размера файла? Этот образец SDK устанавливает размер на -1, даты нуля и атрибут fail_attribute_normal . Это работает с ifileoperation ? Сколько это имеет значение, если я их ошибаюсь? < /P>
Пример кода: < /p>
#include
#include
HRESULT FileOperation(PCTSTR pszSrc, PCTSTR pszDst)
{
struct : IFileSystemBindData
{
DWORD _dwAttributes;
STDMETHODIMP QueryInterface(REFIID iid, PVOID* ppv)
{
if ( iid == __uuidof( IUnknown )
|| iid == __uuidof( IFileSystemBindData ) )
{
*ppv = this;
return( S_OK );
}
*ppv = NULL;
return( E_NOINTERFACE );
}
STDMETHODIMP_(ULONG) AddRef (VOID) { return( 1 ); }
STDMETHODIMP_(ULONG) Release (VOID) { return( 1 ); }
STDMETHODIMP SetFindData(CONST WIN32_FIND_DATA*)
{
return( E_NOTIMPL );
}
STDMETHODIMP GetFindData(LPWIN32_FIND_DATA pfd)
{
*pfd = { _dwAttributes };
return( S_OK );
}
} FileSysBindData;
IBindCtx* pbc;
IShellItem* psiSrc, *psiDst;
IFileOperation* pfo;
CreateBindCtx( 0, &pbc );
pbc->RegisterObjectParam(
(LPOLESTR)STR_FILE_SYS_BIND_DATA, &FileSysBindData );
FileSysBindData._dwAttributes = 0;
SHCreateItemFromParsingName(
pszSrc, pbc, IID_PPV_ARGS( &psiSrc ) );
FileSysBindData._dwAttributes = FILE_ATTRIBUTE_DIRECTORY;
SHCreateItemFromParsingName(
pszDst, pbc, IID_PPV_ARGS( &psiDst ) );
CoCreateInstance( CLSID_FileOperation,
NULL, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS( &pfo ) );
pfo->CopyItem( psiSrc, psiDst, NULL, NULL );
return( pfo->PerformOperations( ) );
}
INT wWinMain(HINSTANCE, HINSTANCE, PTSTR, INT)
{
CoInitialize( 0 );
FileOperation( TEXT( "C:\\Non existent source" ),
TEXT( "C:\\Non existent destination" ) );
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... have-to-be
Насколько точным должен быть win32_find_data, возвращаемый ifilesystembinddata? ⇐ C++
Программы на C++. Форум разработчиков
1757749522
Anonymous
Я хочу преобразовать из использования shfileoperation в ifileoperation , но для каждого файла для каждого файла требуется ifileoperation . Я не хочу создавать фактические iShellitem s, потому что я хочу, чтобы оболочка обрабатывала случаи ошибок, в которых они не существуют, и отображает соответствующий пользовательский интерфейс. Я могу предоставить ifilesystembinddata ShcreateitemfromsingName через контекст Bind, но насколько точным должен быть его результат? Например, если я не знаю, относится ли путь к файлу или каталогу, какими должны быть его атрибуты? А как насчет размера файла? Этот образец SDK устанавливает размер на -1, даты нуля и атрибут fail_attribute_normal . Это работает с ifileoperation ? Сколько это имеет значение, если я их ошибаюсь? < /P>
Пример кода: < /p>
#include
#include
HRESULT FileOperation(PCTSTR pszSrc, PCTSTR pszDst)
{
struct : IFileSystemBindData
{
DWORD _dwAttributes;
STDMETHODIMP QueryInterface(REFIID iid, PVOID* ppv)
{
if ( iid == __uuidof( IUnknown )
|| iid == __uuidof( IFileSystemBindData ) )
{
*ppv = this;
return( S_OK );
}
*ppv = NULL;
return( E_NOINTERFACE );
}
STDMETHODIMP_(ULONG) AddRef (VOID) { return( 1 ); }
STDMETHODIMP_(ULONG) Release (VOID) { return( 1 ); }
STDMETHODIMP SetFindData(CONST WIN32_FIND_DATA*)
{
return( E_NOTIMPL );
}
STDMETHODIMP GetFindData(LPWIN32_FIND_DATA pfd)
{
*pfd = { _dwAttributes };
return( S_OK );
}
} FileSysBindData;
IBindCtx* pbc;
IShellItem* psiSrc, *psiDst;
IFileOperation* pfo;
CreateBindCtx( 0, &pbc );
pbc->RegisterObjectParam(
(LPOLESTR)STR_FILE_SYS_BIND_DATA, &FileSysBindData );
FileSysBindData._dwAttributes = 0;
SHCreateItemFromParsingName(
pszSrc, pbc, IID_PPV_ARGS( &psiSrc ) );
FileSysBindData._dwAttributes = FILE_ATTRIBUTE_DIRECTORY;
SHCreateItemFromParsingName(
pszDst, pbc, IID_PPV_ARGS( &psiDst ) );
CoCreateInstance( CLSID_FileOperation,
NULL, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS( &pfo ) );
pfo->CopyItem( psiSrc, psiDst, NULL, NULL );
return( pfo->PerformOperations( ) );
}
INT wWinMain(HINSTANCE, HINSTANCE, PTSTR, INT)
{
CoInitialize( 0 );
FileOperation( TEXT( "C:\\Non existent source" ),
TEXT( "C:\\Non existent destination" ) );
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79763253/how-accurate-does-the-win32-find-data-returned-by-ifilesystembinddata-have-to-be[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия