Консультация № 110039
18.11.2007, 20:02
0.00 руб.
0 1 1
ЗдравствуйтеУ меня к вам 2 вопроса и я был бы очень благодарен если бы вы мне ответили !

1:

Это отрывок из программы которая копирует содержание всего диска има котрого (то есть буковка С или D и т.д.) в процесе выполнения программы заносится в переменную DRIVE. DRIVE + ":\*" = str3 .
А проблема у меня в том что когда я пишу fo.pFrom = str3 всё компилируется прога врубается но не копирутся говорит что нету там файлов и он нечего не может найти. Как сделать так чтобы fo.pFrom равнялся тому что записанно в str3.

2.
Да и второй вопрос как можно сделать так чтобы во время копирования не выскакивалв окошко прогресса (типо всё должно быть скрытно ) ?


Приложение:
1: SHFILEOPSTRUCT fo; ZeroMemory(&fo, sizeof(fo)); CString str; CString str4; str4=DRIVE; char str1[]=":\*"; char str3[50]; sprintf(str3, "%s%s", str4, str1); str=str3; AfxMessageBox(str); fo.wFunc = FO_COPY; fo.pFrom = str3 ; // VOT PROBLEMA!!!!!!!!! fo.pTo = "C:\PRO"; // path MUST exist if (0 != SHFileOperation(&fo) || TRUE == fo.fAnyOperationsAborted) fprintf(stderr, "SHFileOperation is failed.");

Обсуждение

Неизвестный
19.11.2007, 11:59
общий
это ответ
Здравствуйте, GVA!
По поводу первого вопроса сложно сказать имея так мало данных. Насколько понял я, бегло прочитав MSDN, используемая вами ф-я копирует (в вашем случае) файлы (а не весь диск!), которые должны быть указаны вами в pFrom.
Вот смотрите:

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.

В вашем случае - вы пытаетесь скопировать все файлы - которые в корне диска.
Вы уверены - что в корне диска они есть?

Вы косвенно утверждаете - что fo.pFrom не принимает значение str3 или str - вы проверяли содержимое fo.pFrom? В это, честно говоря, слабо верится :)
Несколько замечаний по стилю:
Вот эту строку
if (0 != SHFileOperation(&fo) || TRUE == fo.fAnyOperationsAborted)
можно записать
if (SHFileOperation(&fo) || fo.fAnyOperationsAborted) так компактнее и понятней.

По поводу второго вопроса:

FOF_SILENT
Do not display a progress dialog box.

Устанавливаете в fFlags данное значение FOF_SILENT, и прогрессбар не должен отображаться.


Форма ответа