В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: Аноним  
Дата: 26.01.04 14:48
Оценка:
Так работает!
Но у меня полный код такой:

char* home=new char[MAX_PATH];
char* path=new char[MAX_PATH];
GetEnvironmentVariable("HOME",home,MAX_PATH);
strcpy(path,home);
strcat(path,"\\directory1");
SHFILEOPSTRUCT sh;
memset(&sh,0,sizeof(sh));
sh.hwnd=NULL;
sh.wFunc=FO_DELETE;
sh.pFrom=path;
SHFileOperation(&sh);
а если написать так:
...
sh.pFrom="c:\\Home\\Directory1"
SHFileOperation(&sh);
то работает

27.01.04 02:03: Перенесено из 'C/C++'
Re: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: Bell Россия  
Дата: 26.01.04 14:55
Оценка:
Здравствуйте, Аноним, Вы писали:

Что-то не очень понятно Судя по тому, что ты написал — все работает, и к чему тогда вопрос?
Любите книгу — источник знаний (с) М.Горький
Re[2]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: wirt  
Дата: 26.01.04 15:01
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


B>Что-то не очень понятно Судя по тому, что ты написал — все работает, и к чему тогда вопрос?


Как же все работает?
sh.pFrom=path;
SHFileOperation(&sh)
НЕ РАБОТАЕТ!
sh.pFrom="c:\\Home\\DIR";
SHFileOperation(&sh)
работает... Но мне нужно, чтобы заработал первый вариант, т.к. я априори не знаю путь...
Re[3]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: Bell Россия  
Дата: 26.01.04 15:24
Оценка:
Здравствуйте, wirt, Вы писали:

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


B>>Здравствуйте, Аноним, Вы писали:


B>>Что-то не очень понятно Судя по тому, что ты написал — все работает, и к чему тогда вопрос?


W>Как же все работает?

W>sh.pFrom=path;
W>SHFileOperation(&sh)
W>НЕ РАБОТАЕТ!
W>sh.pFrom="c:\\Home\\DIR";
W>SHFileOperation(&sh)
W>работает... Но мне нужно, чтобы заработал первый вариант, т.к. я априори не знаю путь...

В первом посте фраза "НЕ РАБОТАЕТ" отсутствовала. Потому я и переспросил.
Следующий вопрос: Что значит "НЕ РАБОТАЕТ"? Программа валится, или или что-то еще?

Терерь для справки: LPCTSTR — это typedef, и то, что он конкретно обозначает, зависит от настроек проекта (определен ли макрос _UNICODE), и может быть и const char*, и const wchar_t*.
Любите книгу — источник знаний (с) М.Горький
Re[4]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: wirt  
Дата: 26.01.04 16:08
Оценка:
B>В первом посте фраза "НЕ РАБОТАЕТ" отсутствовала. Потому я и переспросил.
B>Следующий вопрос: Что значит "НЕ РАБОТАЕТ"? Программа валится, или или что-то еще?

B>Терерь для справки: LPCTSTR — это typedef, и то, что он конкретно обозначает, зависит от настроек проекта (определен ли макрос _UNICODE), и может быть и const char*, и const wchar_t*.


согласен но фраза ек отсутствовала (а была "Работает")
Программа не валится, а появляеттся ShellMsgBox: Путь не найден...
Предвидя ответ проверь путь, проверил и не однократно...
Что такое LPCTSTR я знаю... _UNICODE — не определен... Пытался вручную повызывать как ВСЕ ANSI, так все UNICODE
(тоесть тыпи менял на wchar_t*, и SHFILEOPSTRUCTW и вызывал W — функцию) Не помогло...
Re[5]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: Константин http://flint-inc.ru/
Дата: 26.01.04 16:16
Оценка:
Здравствуйте, wirt, Вы писали:

W> ...

W>Предвидя ответ проверь путь, проверил и не однократно...
W>Что такое LPCTSTR я знаю... _UNICODE — не определен... Пытался вручную повызывать как ВСЕ ANSI, так все UNICODE
W>(тоесть тыпи менял на wchar_t*, и SHFILEOPSTRUCTW и вызывал W — функцию) Не помогло...

Какая реакция на такие три варианта?
char* path="C:\\Home\\DIR";
sh.pFrom=path;

char path[300];
strcpy(path, "C:\\Home\\DIR");
sh.pFrom=path;

sh.pFrom=new char[300];
strcpy(sh.pFrom, "C:\\Home\\DIR");
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: Вадим Никулин Россия Здесь
Дата: 26.01.04 16:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Так работает!

А>Но у меня полный код такой:

А>char* home=new char[MAX_PATH];

А>char* path=new char[MAX_PATH];
А>GetEnvironmentVariable("HOME",home,MAX_PATH);
А>strcpy(path,home);
А>strcat(path,"\\directory1");
А>SHFILEOPSTRUCT sh;
А>memset(&sh,0,sizeof(sh));
А>sh.hwnd=NULL;
А>sh.wFunc=FO_DELETE;
А>sh.pFrom=path;
А>SHFileOperation(&sh);
А>а если написать так:
А>...
А>sh.pFrom="c:\\Home\\Directory1"
А>SHFileOperation(&sh);
А>то работает

А отладчик для кого придумывали? Что в переменной path?
Re[5]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: Bell Россия  
Дата: 26.01.04 16:18
Оценка:
Здравствуйте, wirt, Вы писали:

W>Предвидя ответ проверь путь, проверил и не однократно...


Странно.
Может после GetEnvironmentVariable в home последний символ \ ? Короче смотри внимательнее в отладчике. Других вариантов пока в голову не приходит
Любите книгу — источник знаний (с) М.Горький
Re[5]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: SergeMukhin Россия  
Дата: 26.01.04 16:22
Оценка:
Здравствуйте, wirt, Вы писали:


W>Программа не валится, а появляеттся ShellMsgBox: Путь не найден...

W>Предвидя ответ проверь путь, проверил и не однократно...
W>Что такое LPCTSTR я знаю... _UNICODE — не определен... Пытался вручную повызывать как ВСЕ ANSI, так все UNICODE
W>(тоесть тыпи менял на wchar_t*, и SHFILEOPSTRUCTW и вызывал W — функцию) Не помогло...

1. GetEnvironmentVariable завершается нормально? какой результат?
2. Если напечатать home после GetEnvironmentVariable выводится правильно (то что ожидалось)?
3. Если напечатать path перед SHFileOperation выводится правильно?
4. это учли:
pFrom
Address of a buffer to specify one or more source file names. These names must be fully qualified paths. Standard Microsoft® MS-DOS® wild cards, such as "*", are permitted in the file-name position. Although this member is declared as a null-terminated string, it is used as a buffer to hold multiple file names. Each file name must be terminated by a single NULL character. An additional NULL character must be appended to the end of the final name to indicate the end of pFrom.
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[6]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: wirt  
Дата: 26.01.04 18:49
Оценка:
Здравствуйте, SergeMukhin, Вы писали:

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



W>>Программа не валится, а появляеттся ShellMsgBox: Путь не найден...

W>>Предвидя ответ проверь путь, проверил и не однократно...
W>>Что такое LPCTSTR я знаю... _UNICODE — не определен... Пытался вручную повызывать как ВСЕ ANSI, так все UNICODE
W>>(тоесть тыпи менял на wchar_t*, и SHFILEOPSTRUCTW и вызывал W — функцию) Не помогло...

SM>1. GetEnvironmentVariable завершается нормально? какой результат?

SM>2. Если напечатать home после GetEnvironmentVariable выводится правильно (то что ожидалось)?
SM>3. Если напечатать path перед SHFileOperation выводится правильно?
SM>4. это учли:
SM>pFrom
SM>Address of a buffer to specify one or more source file names. These names must be fully qualified paths. Standard Microsoft® MS-DOS® wild cards, such as "*", are permitted in the file-name position. Although this member is declared as a null-terminated string, it is used as a buffer to hold multiple file names. Each file name must be terminated by a single NULL character. An additional NULL character must be appended to the end of the final name to indicate the end of pFrom.
Путь правильный (b через отладчик и MessageBox), MSDN читал —
strcpy(path,home);
strcat(path,"\\directory1\0"); !!! писал
SHFILEOPSTRUCT sh;
memset(&sh,0,sizeof(sh));
sh.wFunc=FO_DELETE;
sh.pFrom=path;
SHFileOperation(&sh);
---------------
совет ctrcpy(sh.pFrom,path); не помог

И все предыдущие советы тоже не помогли... А советы пишутся не проверяя на работоспособность? (ко всем)
Re[6]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: wirt  
Дата: 26.01.04 18:50
Оценка:
Здравствуйте, Константин, Вы писали:

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


W>> ...

W>>Предвидя ответ проверь путь, проверил и не однократно...
W>>Что такое LPCTSTR я знаю... _UNICODE — не определен... Пытался вручную повызывать как ВСЕ ANSI, так все UNICODE
W>>(тоесть тыпи менял на wchar_t*, и SHFILEOPSTRUCTW и вызывал W — функцию) Не помогло...

К>Какая реакция на такие три варианта?

К>
К>char* path="C:\\Home\\DIR";
К>sh.pFrom=path;
К>

К>
К>char path[300];
К>strcpy(path, "C:\\Home\\DIR");
К>sh.pFrom=path;
К>

К>
К>sh.pFrom=new char[300];
К>strcpy(sh.pFrom, "C:\\Home\\DIR");
К>


Работает только с первым... Но мне это не помогает...
Re[7]: В чем прикол LPCTSTR?, в SHFILEOPSTRUCT::pFrom?
От: SergeMukhin Россия  
Дата: 26.01.04 19:37
Оценка:
Здравствуйте, wirt, Вы писали:

W
W>Путь правильный (b через отладчик и MessageBox), MSDN читал —
W>strcpy(path,home);
W>strcat(path,"\\directory1\0"); !!! писал

ну это бред, strcat будет работать до первого "\0" т.е. запишет один 0! т.е. это эквивалентно strcat(path,"\\directory1");

Лучше написать (для простоты) memset на весь path.
Нет ли пробелов в переменной HOME, их можно не заметить
если присвоили например так set home = xaxaxa то первым символом будет пробел (я не уверен, что это SHFileOperation понравится)

и еще проверь статический path
static path[300];


W>SHFILEOPSTRUCT sh;

W>memset(&sh,0,sizeof(sh));
W>sh.wFunc=FO_DELETE;
W>sh.pFrom=path;
W>SHFileOperation(&sh);
W>---------------
W>совет ctrcpy(sh.pFrom,path); не помог
xnj

W>И все предыдущие советы тоже не помогли... А советы пишутся не проверяя на работоспособность? (ко всем)


ну если бы приведен маленькая, но полная программа, что бы можно одним copy/paste ее создать, да и инструкция к применению ведь надо еще home присвоить, тогда может быть кто-нибудь и попробует. Может даже я (но завтра).
а так сколько надо текста набить что-бы проверить!
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.