Насколько точным должен быть win32_find_data, возвращаемый ifilesystembinddata?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Насколько точным должен быть win32_find_data, возвращаемый ifilesystembinddata?

Сообщение 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" ) );
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... have-to-be
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»