Неполучается удалить папку
От: AOD Россия  
Дата: 18.07.08 06:03
Оценка:
Доброе утро.

SHFileOperation всегда выдает: "Не удается удалить файл. Не удается произвести чтение из файла или с диска.".
В ручную все удаляется без проблем.

CString root = "C:\\new\\sound";
SHFILEOPSTRUCT sh={0};
sh.hwnd=this->GetSafeHwnd();
sh.pFrom = (LPCSTR)root.GetBuffer();
sh.wFunc=FO_DELETE;
sh.fFlags=FOF_ALLOWUNDO;
SHFileOperation(&sh);


В чем может быть причина?
Re: Неполучается удалить папку
От: _NaN_ Россия www.elangroup-software.com
Дата: 18.07.08 06:11
Оценка:
Здравствуйте, AOD, Вы писали:


AOD>sh.pFrom = (LPCSTR)root.GetBuffer();


AOD>В чем может быть причина?


Надо к имени файла прибавить еще '\0'. Из MSDN:
pFrom
Note This string must be double-null terminated.

A pointer to one or more source file names. These names should be fully-qualified paths to prevent unexpected results.

Standard Microsoft MS-DOS wildcard characters, such as "*", are permitted only in the file-name position. Using a wildcard character elsewhere in the string will lead to unpredictable results.

Although this member is declared as a single null-terminated string, it is actually a buffer that can hold multiple null-delimited file names. Each file name is terminated by a single NULL character. The last file name is terminated with a double NULL character ("\0\0") to indicate the end of the buffer.
Re[2]: Неполучается удалить папку
От: dcb-BanDos Россия  
Дата: 18.07.08 11:30
Оценка:
Здравствуйте, _NaN_, Вы писали:

_NN>Здравствуйте, AOD, Вы писали:



AOD>>sh.pFrom = (LPCSTR)root.GetBuffer();


AOD>>В чем может быть причина?


_NN>Надо к имени файла прибавить еще '\0'. Из MSDN:



Тру жесть, странно что нету еще триплнулей в конце )))
Ничто не ограничивает полет мысли программиста так, как компилятор.
Re[3]: Неполучается удалить папку
От: fuyant  
Дата: 18.07.08 13:37
Оценка:
Здравствуйте, dcb-BanDos, Вы писали:

DB>Тру жесть, странно что нету еще триплнулей в конце )))


А что вас так удивило?
Стандартный способ отделения мультистрок в буфере, используемое в WinAPI
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.