Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2014, 19:47   #1
zheka317
Пользователь
 
Регистрация: 10.10.2013
Сообщений: 12
По умолчанию не работает fo_move

Здравствуйте! Проблема в следующем: нужно переименовать папку, для этого использую fo_move. Если прописать путь к папке вручную, целиком, то всё работает; а если так - то нет:

Код:
#include <shellapi.h>
. . .
AnsiString sDir = ExtractFilePath(Application->ExeName);
AnsiString name2;
name2 = GenForm->ComboBox1->Text;
AnsiString name;
name = Edit1->Text;

SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd  = Handle;
op.wFunc = FO_MOVE;
op.pFrom = (sDir + "\\" + name2 + "\0").c_str();
op.pTo = (sDir + "\\" + name + "\0").c_str();
op.fFlags= 0;
SHFileOperation( &op);
Папка создаётся, но пустая, в неё ничего не копируется. Заранее всем спасибо.
zheka317 вне форума Ответить с цитированием
Старый 14.07.2014, 20:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

SHFileOperation() Это функция. Соответственно:
Код:
if (SHFileOperation(&op)) {Тут выводим код ошибки получаемый функой GetLastError()}
Вот для начала хотелось бы узнать что за код ошибки, если ошибка всплывает всетки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.07.2014, 00:21   #3
zheka317
Пользователь
 
Регистрация: 10.10.2013
Сообщений: 12
По умолчанию

GetLastError() возвращает 0, SysErrorMessage( GetLastError() ) уверяет меня, что "операция успешно завершена", хотя на самом деле ничего подобного не произошло
zheka317 вне форума Ответить с цитированием
Старый 15.07.2014, 08:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
GetLastError() возвращает 0
Т.е. if() сработал? Значит SHFileOperation вернул не ноль - а это ошибка.
Надо теперь выяснить как определять что вернула функция и что это за код ошибки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.07.2014, 09:23   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Do not use GetLastError with the return values of this function.

Функция возвращает код ошибки, надо смотреть на результат вызова.

Ref:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
waleri на форуме Ответить с цитированием
Старый 15.07.2014, 11:43   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Блин, жаль что не могу плюсануть waleri - он прав, а я ошибался. Хоть и ошибся не на 100%
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2014, 01:05   #7
zheka317
Пользователь
 
Регистрация: 10.10.2013
Сообщений: 12
По умолчанию

Всем спасибо за участие, однако противный SHFileOperation() так и не пожелал заработать. Поэтому я сделал так:
Код:
AnsiString sDir = ExtractFilePath(Application->ExeName);
AnsiString name2;
name2 = GenForm->ComboBox1->Text;
AnsiString name;
name = Edit1->Text;

GenForm->DirectoryListBox1->Directory = GenForm->DirectoryListBox1->Directory + "\\" +  name2;
String from = GenForm->DirectoryListBox1->Directory;
GenForm->DirectoryListBox1->Directory = ExtractFilePath(Application->ExeName);
String to = GenForm->DirectoryListBox1->Directory + "\\" +  name;
MoveFile(from.c_str(), to.c_str());
... и всё заработало.
zheka317 вне форума Ответить с цитированием
Старый 16.07.2014, 09:41   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Попробуйте сделать MoveFile с одного диска на другой
waleri на форуме Ответить с цитированием
Старый 16.07.2014, 20:53   #9
zheka317
Пользователь
 
Регистрация: 10.10.2013
Сообщений: 12
По умолчанию

к счастью, в моей программе не нужно делать MoveFile с одного диска на другой
zheka317 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sendmail работает, функция mail() работает, но есть проблема. PavelNAndreev PHP 8 27.01.2014 12:45
не работает relese версия проги и debug работает тока на моем компе D][mon C# (си шарп) 2 04.05.2012 20:21
Программа работает пошагово, но не работает при запуске -Katerina- Microsoft Office Excel 3 12.07.2011 03:40
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
Библиотека НЕ работает с 2008, но работает с 2000 SQL namenike Общие вопросы C/C++ 0 26.05.2009 11:04