помогите с SHFileOperation и SHGetSpecialFolderPathA
От: RIVATNT  
Дата: 04.06.11 10:16
Оценка:
Привет всем, помогите новичку

неработает код пишет что: мол так и так не могу найти файл или прочитать его с диска, хотя если pFrom указывать прямым текстом например C:\\folder\\*.*\0 чистит все, а вот в локал дата неработает, прбовал в двумя нулями пробовал по разному не работает, проверял на доступность файла в ручную все доступно, удаляется без проблем. конролировал путь через messagebox все вроде правильно но правдо пути(только что обратил внимание) он отображет с одним слешем может в это то и проблема? пожалуйста объясните как заставить код работать...

char pth1[MAX_PATH] = "";
SHGetSpecialFolderPathA(NULL, pth1, CSIDL_LOCAL_APPDATA, FALSE);
std::stringstream path_cache_S1;
path_cache_S1 << pth1<< "\\sc\\Cache\\*.*\0";

SHFILEOPSTRUCT sh;
ZeroMemory(&sh, sizeof(SHFILEOPSTRUCT));
sh.pFrom = ru_wstring(path_cache_S1.str()).c_str();
sh.fFlags = FOF_FILESONLY|FOF_NOCONFIRMATION;
sh.wFunc = FO_DELETE;
SHFileOperation(&sh);

MessageBoxW(NULL,ru_wstring(path_cache_S1.str()).c_str(),ru_wstring(path_cache_S1.str()).c_str(), 1);


функция ru_wstring
std::wstring ru_wstring(const std::string &s) {
    std::wstring result;
    std::locale loc("russian_Russia.1251");
    result.reserve(s.size());
    const std::ctype<wchar_t> &facet = std::use_facet<std::ctype<wchar_t> >(loc);
    for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
        result.append(1, facet.widen(*i));
    return result;
}



04.06.11 17:42: Перенесено из 'C/C++'
shgetspecialfolderpatha shfileoperation с++
Re: помогите с SHFileOperation и SHGetSpecialFolderPathA
От: RIVATNT  
Дата: 04.06.11 10:45
Оценка:
кстати щас попрробовал сделать так и не работает, значит в этом проблема... но как ее решить..
path_cache_S1 << "C:\\VK\\Cache\\*.*\0";
Re: помогите с SHFileOperation и SHGetSpecialFolderPathA
От: okman Беларусь https://searchinform.ru/
Дата: 04.06.11 10:59
Оценка: 2 (1)
Здравствуйте, RIVATNT, Вы писали:

RIV>Привет всем, помогите новичку


RIV>неработает код пишет что: мол так и так не могу найти файл или прочитать его с диска, хотя если pFrom указывать прямым текстом например C:\\folder\\*.*\0 чистит все, а вот в локал дата неработает, прбовал в двумя нулями пробовал по разному не работает, проверял на доступность файла в ручную все доступно, удаляется без проблем. конролировал путь через messagebox все вроде правильно но правдо пути(только что обратил внимание) он отображет с одним слешем может в это то и проблема? пожалуйста объясните как заставить код работать...


  Скрытый текст
RIV>
RIV>char pth1[MAX_PATH] = "";
RIV>SHGetSpecialFolderPathA(NULL, pth1, CSIDL_LOCAL_APPDATA, FALSE);
RIV>std::stringstream path_cache_S1;
RIV>path_cache_S1 << pth1<< "\\sc\\Cache\\*.*\0";

RIV>SHFILEOPSTRUCT sh;
RIV>ZeroMemory(&sh, sizeof(SHFILEOPSTRUCT));
RIV>sh.pFrom = ru_wstring(path_cache_S1.str()).c_str();
RIV>sh.fFlags = FOF_FILESONLY|FOF_NOCONFIRMATION;
RIV>sh.wFunc = FO_DELETE;
RIV>SHFileOperation(&sh);

RIV>MessageBoxW(NULL,ru_wstring(path_cache_S1.str()).c_str(),ru_wstring(path_cache_S1.str()).c_str(), 1);
RIV>


RIV>функция ru_wstring

RIV>
RIV>std::wstring ru_wstring(const std::string &s) {
RIV>    std::wstring result;
RIV>    std::locale loc("russian_Russia.1251");
RIV>    result.reserve(s.size());
RIV>    const std::ctype<wchar_t> &facet = std::use_facet<std::ctype<wchar_t> >(loc);
RIV>    for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
RIV>        result.append(1, facet.widen(*i));
RIV>    return result;
RIV>}
RIV>


Может проблема быть в том, что дополнительный завершающий нуль, который требуется в SHFileOperation,
не попадает в std::stringstream ?
Re[2]: помогите с SHFileOperation и SHGetSpecialFolderPathA
От: RIVATNT  
Дата: 04.06.11 11:08
Оценка:
O>Может проблема быть в том, что дополнительный завершающий нуль, который требуется в SHFileOperation,
O>не попадает в std::stringstream ?
Щас пороем в эту сторону в гугле
Re[3]: помогите с SHFileOperation и SHGetSpecialFolderPathA
От: okman Беларусь https://searchinform.ru/
Дата: 04.06.11 11:19
Оценка:
Здравствуйте, RIVATNT, Вы писали:

O>>Может проблема быть в том, что дополнительный завершающий нуль, который требуется в SHFileOperation,

O>>не попадает в std::stringstream ?
RIV>Щас пороем в эту сторону в гугле

В любом случае, Вы же не считаете, что после
sh.pFrom = ru_wstring(path_cache_S1.str()).c_str();

в pFrom строка попадает с двумя завершающими нулями ?
Re[4]: помогите с SHFileOperation и SHGetSpecialFolderPathA
От: RIVATNT  
Дата: 04.06.11 11:41
Оценка:
Здравствуйте, okman, Вы писали:

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


O>>>Может проблема быть в том, что дополнительный завершающий нуль, который требуется в SHFileOperation,

O>>>не попадает в std::stringstream ?
RIV>>Щас пороем в эту сторону в гугле

O>В любом случае, Вы же не считаете, что после

O>
O>sh.pFrom = ru_wstring(path_cache_S1.str()).c_str();
O>

O>в pFrom строка попадает с двумя завершающими нулями ?
???? Извените. Не понял.....
Re: помогите с SHFileOperation и SHGetSpecialFolderPathA
От: RIVATNT  
Дата: 04.06.11 13:01
Оценка:
Здравствуйте, RIVATNT, Вы писали:

RIV>Привет всем, помогите новичку


RIV>неработает код пишет что: мол так и так не могу найти файл или прочитать его с диска, хотя если pFrom указывать прямым текстом например C:\\folder\\*.*\0 чистит все, а вот в локал дата неработает, прбовал в двумя нулями пробовал по разному не работает, проверял на доступность файла в ручную все доступно, удаляется без проблем. конролировал путь через messagebox все вроде правильно но правдо пути(только что обратил внимание) он отображет с одним слешем может в это то и проблема? пожалуйста объясните как заставить код работать...


RIV>
RIV>char pth1[MAX_PATH] = "";
RIV>SHGetSpecialFolderPathA(NULL, pth1, CSIDL_LOCAL_APPDATA, FALSE);
RIV>std::stringstream path_cache_S1;
RIV>path_cache_S1 << pth1<< "\\sc\\Cache\\*.*\0";

RIV>SHFILEOPSTRUCT sh;
RIV>ZeroMemory(&sh, sizeof(SHFILEOPSTRUCT));
RIV>sh.pFrom = ru_wstring(path_cache_S1.str()).c_str();
RIV>sh.fFlags = FOF_FILESONLY|FOF_NOCONFIRMATION;
RIV>sh.wFunc = FO_DELETE;
RIV>SHFileOperation(&sh);

RIV>MessageBoxW(NULL,ru_wstring(path_cache_S1.str()).c_str(),ru_wstring(path_cache_S1.str()).c_str(), 1);
RIV>


RIV>функция ru_wstring

RIV>
RIV>std::wstring ru_wstring(const std::string &s) {
RIV>    std::wstring result;
RIV>    std::locale loc("russian_Russia.1251");
RIV>    result.reserve(s.size());
RIV>    const std::ctype<wchar_t> &facet = std::use_facet<std::ctype<wchar_t> >(loc);
RIV>    for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
RIV>        result.append(1, facet.widen(*i));
RIV>    return result;
RIV>}
RIV>

наконец то заработал, тама закрыта...
LPWSTR pth1;
SHGetSpecialFolderPathW(NULL, pth1, CSIDL_LOCAL_APPDATA, FALSE);

std::wstring path_cache_S1 = pth1 ;
path_cache_S1+=L"\\VK\\вавв\\*.*\0";
LPCWSTR delfiles = path_cache_S1.c_str(); 
        
SHFILEOPSTRUCT sh;
ZeroMemory(&sh, sizeof(SHFILEOPSTRUCT));
sh.pFrom = delfiles;
sh.fFlags = FOF_FILESONLY|FOF_NOCONFIRMATION;
sh.wFunc = FO_DELETE;
SHFileOperation(&sh);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.