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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2011, 15:31   #1
BeLuY
 
Регистрация: 15.04.2008
Сообщений: 6
По умолчанию После копирования программа не видит файл. Delphi

Здравствуйте. В общем проблема следующего характера: на форме две кнопки, событие первой запускает копирование файла в папку программы, второй - проверяет наличие вновь созданного файла. После процедуры копирование (CopyFile, CopyFileEx), файл появляется в проводнике, но функция FileExists() не видит его. После перезапуска, программа начинает его видеть. Как это исправить?

Спасибо!
BeLuY вне форума Ответить с цитированием
Старый 08.10.2011, 15:56   #2
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

код посмотреть можно?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 08.10.2011, 16:13   #3
BeLuY
 
Регистрация: 15.04.2008
Сообщений: 6
По умолчанию

Примерно как-то так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not FileExists('CopyFile.txt') then ShowMessage('Файла нет');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    CopyFile(PChar(OpenDialog1.FileName),PChar(ExtractFileDir(ParamStr(0))+'\CopyFile.txt'),true);
end;

Последний раз редактировалось BeLuY; 08.10.2011 в 17:08.
BeLuY вне форума Ответить с цитированием
Старый 08.10.2011, 16:25   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Скорее всего, в настройках параметров запуска Вашего приложения, первій параметр ParamStr(0) - не соответсвует текущей директории с ЕХЕ файлом.
Это могло проявится полсе переноса (переименования) Вашего проекта с папки в папку. Как правило, про этот параметр забывают )))
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 08.10.2011, 16:47   #5
BeLuY
 
Регистрация: 15.04.2008
Сообщений: 6
По умолчанию

Дело не в этом, ведь файл в проводнике появляется, да и вручную пути прописывал - результат тот же
BeLuY вне форума Ответить с цитированием
Старый 08.10.2011, 16:49   #6
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Попробуйте так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not FileExists(ExtractFileDir(ParamStr(0))+'\CopyFile.txt') then ShowMessage('Файла нет');
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 09.10.2011, 14:34   #7
BeLuY
 
Регистрация: 15.04.2008
Сообщений: 6
По умолчанию

Спасибо, помогло, но теперь возникла следующая проблема: после вызова OpenDialog.Execute не работает ShellExecute. Для наглядности приведу код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin  
  if not FileExists(ExtractFileDir(ParamStr(0))+'\Asm00.asm') then ShowMessage('Файла нет');
  ShellExecute(Application.Handle,'open',PAnsiChar('TASM\TASM.EXE'),PAnsiChar('Asm00.asm /t > 1.txt'),'',SW_SHOW);  
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    CopyFile(PChar(OpenDialog1.FileName),PChar(ExtractFileDir(ParamStr(0))+'\Asm00.asm'),true);
  //CopyFile(PChar('D:\Prog01.asm'),PChar(ExtractFileDir(ParamStr(0))+'\Asm00.asm'),true);
end;
Если файл Asm00.asm есть, то при нажатии на Button1 работает, или же следует перезапускать программу

Добавлю: Если сделать так, то все работает:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  //if OpenDialog1.Execute then
    //CopyFile(PChar(OpenDialog1.FileName),PChar(ExtractFileDir(ParamStr(0))+'\Asm00.asm'),true);
  CopyFile(PChar('D:\Prog01.asm'),PChar(ExtractFileDir(ParamStr(0))+'\Asm00.asm'),true);
end;

Последний раз редактировалось BeLuY; 09.10.2011 в 14:41. Причина: Добавил
BeLuY вне форума Ответить с цитированием
Старый 09.10.2011, 15:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
после вызова OpenDialog.Execute не работает ShellExecute
Ерунда. Все там работает, просто ты не потрудился указать в ShellExecute директорию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2011, 15:24   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Stilet, ну разумеется!

BeLuY, Вы продолжаете наступать на одни и те же грабли!

Нужно, чтобы текущим был НУЖНЫЙ каталог или (ЛУЧШЕ!) работать с полными именами директорий (использовать полный путь, как Вам показали в примере).
Скорее всего при выполнении OpenDialog текущая папка сменяется на выбранную, соответственное ShellExecute не может выполнить 'TASM\TASM.EXE', т.к. в текущей папке нет подпапки TASM ...
пробуйте, например, так:
Код:
ShellExecute(Application.Handle,'open',PAnsiChar(ExtractFileDir(ParamStr(0))+'\TASM\TASM.EXE'),PAnsiChar('Asm00.asm /t > 1.txt'),'',SW_SHOW);
ну, разумеется, если папка TASM с tasm.exe внутри неё лежит там же, где ваш exeшник...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2011, 15:43   #10
BeLuY
 
Регистрация: 15.04.2008
Сообщений: 6
По умолчанию

И правда, спасибо!
BeLuY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание приложения после копирования каталогов Never74 Общие вопросы Delphi 6 23.09.2011 14:34
Изменяется строки после их копирования Exeil Общие вопросы C/C++ 2 23.11.2010 18:56
запуск после копирования siemdi Общие вопросы C/C++ 1 07.08.2010 02:45
После копирования в другую директорию программа не работает Terikon Общие вопросы Delphi 8 31.03.2009 00:19
BIOSa не видит винта после замены платы управления PDVich Компьютерное железо 3 05.03.2008 14:38