Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Foxpro/Clipper/Dbase > работа команды COPY FILE


Автор: Artiom 15.6.2006, 10:30
Чтобы скопировать файл пишу
Код

COPY FILE  path1 TO path2

В ответ получаю "не существует файла D:\Foxpro\project\path1" (ищет в директории которая прописана в DEFAULT файл path1 !!!)
path1 - переменная. в которой содержится путь к файлу (пусть D:\dir\file.txt). Если так и написать 
Код

COPY FILE  "D:\dir\file.dbf" TO "D:\dir2\file.dbf"

то все работает
Объясниет пожалуйста что не так.

проверял TYPE(path1) - все нормально, возвращает 'C'
 

Автор: Cashey 15.6.2006, 11:35
Artiom, привиди код где ты присваеваешь значение переменной path1 

Автор: Artiom 15.6.2006, 11:49
Цитата(Cashey @  15.6.2006,  11:35 Найти цитируемый пост)
Artiom, привиди код где ты присваеваешь значение переменной path1 

Код

* вычитываю каталог из базы
IF !USED('options')
    SELECT SELECT(1)
    USE tables\mytable
    SELECT mytable
else
    SELECT mytable
ENDIF 
SEEK 31 ORDER op_id
path_start = op_value

***************
* добавляю имя файла
f_name = "file.dbf"
path1 = ALLTRIM(path_start) + '\' + f_name 

 

Автор: Cashey 15.6.2006, 13:14
ну а в op_value у тебя что? 

Автор: Artiom 15.6.2006, 13:21
Цитата(Cashey @  15.6.2006,  13:14 Найти цитируемый пост)
ну а в op_value у тебя что? 

"D:\dir" 

Автор: Cashey 15.6.2006, 13:22
короче, пиши так
Код

* вычитываю каталог из базы
IF !USED('options')
    USE tables\mytable
ENDIF 
    SELECT mytable
SEEK 31 ORDER op_id
path_start = op_value
***************
* добавляю имя файла
f_name = "file.dbf"
path1 =ADDBS(ALLTRIM(path_start)) + f_name
********************
*копирование
 COPY FILE  &path1 TO &path2
 

Автор: Artiom 15.6.2006, 13:24
В том то и дело что путь формируется правильно
Код

messagebox(path1) && выводит как и надо - D:\dir\file.dbf
COPY FILE  path1 TO path2

выводит нормальный путь а потом ругается на COPY

Добавлено @ 13:28 
Цитата(Cashey @  15.6.2006,  13:22 Найти цитируемый пост)
короче, пиши так

попробую

Добавлено @ 13:32 
работает! спасибо. 

Автор: Cashey 15.6.2006, 13:41
А еще лучше - отказаться от встроенной возможности FoxPro. Потому, что они не учитывают возможные ошибки при копировании (атребуты файла или наличие файла с таким же именем в каталоге куда копируется файл, нехватка места и т.д.)
Вот как делаю я в таких случаях:
Код

*Объявляю функции из WinAPI
*Смотри как это делается - в будующем может пригодится
 DECLARE SHORT GetLastError IN Win32API  AS GetLError
 
 DECLARE SHORT CopyFile IN Win32API  AS CopyDFile ;
  String cFile, String @cToFile, Integer FlagExist

 DECLARE INTEGER SetFileAttributes IN Win32API as SetFileAttribut ;
 String lpFileName, Integer dwFileAttributes 
**********************************************************
lcProgram=ADDBS(JUSTPATH(FULLPATH(SYS(16,0))))
CD (lcProgram)
*cPathName - имя файла
*Проверяем наличия файла с тем же именем
IF ADIR(laFile2, ALLTRIM(lcProgram + cPathName)+"*.*") > 0
    *Устанавливаем атребуты файла в NORMAL
      SetFileAttribut(lcProgram + cPathName + laFile2[i1,1], 0 )
     *Копируем файл
      m.kw = CopyDFile(lcPath + cPathName + laFile2[i1,1], ;
      lcProgram + cPathName + laFile2[i1,1],0)
      IF EMPTY(m.kw)
        m.err  = GetLError()
        MESSAGEBOX("Ошибка копирования файла"+CHR(13)+ "Код ошибки: "STR(m.err), "Внимание!", 16)
      ENDIF
endif

примерно так, код выдернут из живого проекта, но вроде бы сильной привязки нет - разобратся можно 

Автор: bux 4.7.2006, 22:08
Чтобы скопировать файл пишу

1: COPY FILE  path1 TO path2

Угу. Счаз.

COPY FILE  (path1) TO (path2) вроде, если память не изменяет.
В случае чего если не так вспомнил  - принимаю заслуженные пинки ногами.

 

Автор: Artiom 5.7.2006, 08:26
Цитата(bux @  4.7.2006,  22:08 Найти цитируемый пост)
В случае чего если не так вспомнил  - принимаю заслуженные пинки ногами

Пинаю 
из help к VFP8.0
Код

COPY FILE FileName1 TO FileName2
 

Автор: Сергей 5.7.2006, 13:53
Цитата

Artiom
Пинаю 
из help к VFP8.0
1:COPY FILE FileName1 TO FileName2


Вот это правильное решение: 
Цитата

Bux
COPY FILE  (path1) TO (path2)


и вот это:
Цитата

Cashey
*копирование
 COPY FILE  &path1 TO &path2

только нужно понять - почему пишется именно так.
Все дело в том, что ты хочешь копировать не сами переменные path1 и path2, а то - что в них содержится. 
А как Foxу про это знать? Правильно, за счет указания символа  макроподстановка - &. Это в Foxе очень мощный механизм, и по возможности - разберись как с ним работать. С его применением - очень много проблем решается элегантно.
 

Автор: Cashey 7.7.2006, 15:24
Вопрос вроде решенный, чего вы из пустого в порожнее переливаете?
В качестве параметров команды COPY TO используется имя файла, а не его текстовое обозначение, т.е. без кавычек. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)