:: Visual Foxpro, Foxpro for DOS
И снова про copy file
tata

Сообщений: 3469
Откуда: Йошкар-Ола
Дата регистрации: 23.10.2005
Не работает команда
Copy file (addbs(isxpath1)+namefile) to (copypat2)
Подозреваемая причина - очень большая вложенность каталогов (изменить это нельзя).
Длина переменной copypat2, например, 337 знаков.
Попытки использовать WSH и FSO не удались, сообщение ' OLE dispatch code0 не удаётся дождаться процесса...
Ratings: 0 negative/0 positive
Re: И снова про copy file
of63
Автор

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Переведи имя в формат 8.3, тогда по 11 символов на вложение займет, влезет до 250/12 = 20 вложений примерно
GetShortPathName(S,S,I) && короткое (DOS) имя файла. (LongPath, ShortPath, lenBuffer)
Ratings: 0 negative/0 positive
Re: И снова про copy file
sphinx

Сообщений: 31188
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
tata
очень большая вложенность каталогов

Есть одна идея...
Можно рекурсивно ПЕРЕНОСИТЬ файл все глубже и глубже....

Например, у нас есть файл C:\TEMP\myfile.txt.
Его нужно скопировать в C:\1\1\2\3\4...9999\myfile.txt

1) Переносим в C:\1 - теперь файл находится в C:\1
2) Переносим в C:\1\2 - теперь файл находится в C:\1\2
и т.д.

Это просто принцип, на практике это, понятное дело, нужно реализовать в виде цикла. Да и то, если более простые способы никак не помогут. А чем хорош - так тем, что можно скопировать/перенести в каталог ОТНОСИТЕЛЬНО текущего, т.е. не надо выписывать/собирать полный длинный путь.


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 22.05.19 22:02
Ratings: 0 negative/0 positive
Re: И снова про copy file
sphinx

Сообщений: 31188
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Можно этот алгоритм немного оптимизировать - путем двоичного дерева - находим середину этого длинного пути и пробуем скопировать файл туда. Если скопировать не удалось - делим первую половину еще пополам и опять копируем. Если удалось скопировать - делим вторую половину пополам и копируем туда.

Алгоритм будет сложнее, но процессов копирования намного меньше.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: И снова про copy file
tata

Сообщений: 3469
Откуда: Йошкар-Ола
Дата регистрации: 23.10.2005
sphinx
Можно этот алгоритм немного оптимизировать - путем двоичного дерева - находим середину этого длинного пути и пробуем скопировать файл туда. Если скопировать не удалось - делим первую половину еще пополам и опять копируем. Если удалось скопировать - делим вторую половину пополам и копируем туда.
Алгоритм будет сложнее, но процессов копирования намного меньше.
Что-то меня смущает в этой идее...
Если процесс по какой-то причине не завершится, в папке будут находиться абсолютно не предназначенные для нее файлы.
По головке за такое не погладят.
Ratings: 0 negative/0 positive
Re: И снова про copy file
Перминов Игорь

Сообщений: 1591
Откуда: Красная Орловка
Дата регистрации: 16.09.2001
Попробуйте сделать CMD-файл с командой
ROBOCOPY "<from>" "<to>" /FFT /MIR /R:3 /W:5 /TEE /FP /NDL /NP
Где from - содержимое addbs(isxpath1)
А to - содержимое copypat2
Если все нормально будет, то можно такой файл делать и запускать командой RUN
* Пример
*
ROBOCOPY "d:\asdfafasdf\adsfdf\adfasdfas\adfafasd\a.txt" "e:\tutyuuty\tyututu\tyututu\tyututy\tyutyut\b.txt" /FFT /MIR /R:3 /W:5 /TEE /FP /NDL /NP


------------------
Без коментариев..
Ratings: 0 negative/0 positive
Re: И снова про copy file
of63
Автор

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Вот еще способ - использовать несколько раз SET DEFAULT и относительные пути:
* есть файл c:\fldr\video\myfile.avi Допустим имена fldr и video длинные, и имеют длину 200 символов, тогда поступим так:
m.d = SET("DEFAULT") && C:
m.c = CURDIR() && \FOXPROJ\ - старое состояние. После копирования его надо вернуть в это состояние!
SET default to ("c:\fldr") && перемещаемся в каталог fldr
?CURDIR() && \fldr\
SET default to ("video")
?CURDIR() && \fldr\video\
* здесь можно переметиться внутрь по подкаталогам еще несколько раз...
?FILE("myfile.avi") && .T. или можно выполнить COPY FILE ("myfile.avi") TO ("C:\tmp\aaa.avi")
SET DEFAULT TO (m.d+m.c) && возвращаем в старое состояние
Ratings: 0 negative/0 positive
Re: И снова про copy file
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
of63
Допустим имена fldr и video длинные, и имеют длину 200 символов

200 ни о чем не говорит. Ограничение 256 символов на путь к файлу.
Вроде как недавно только "разрешили" больше в 10ке.

Я попытался пример накидать, но даже каталоги не создаются с общей длиной пути более 256 байт.
Ratings: 0 negative/0 positive
Re: И снова про copy file
of63
Автор

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я написал пример, в котором путь к файлу - 400 байт, но фоксом до него добраться можно.

Кстати, по описанию ОС есть такой способ задания длинного пути: \\?\C:\длинный_путь, но фокс (FILE("\\?\...")) не видит файла, даже на простых коротких англоязычных путях...
Ratings: 0 negative/0 positive
Re: И снова про copy file
TAS

Сообщений: 851
Откуда: Москва
Дата регистрации: 28.09.2000
Посмотрите FileSystemObject!

Пример использования, что-то вроде:

loFSO = CREATEOBJECT('Scripting.FileSystemObject')
loFSO.CopyFile ("c:\mydocuments\letters\*.doc", "c:\tempfolder\")

Хорошую ссыль нашел: celitel.info



Исправлено 1 раз(а). Последнее : TAS, 23.05.19 12:00
Ratings: 0 negative/0 positive
Re: И снова про copy file
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
FileSystemObject тоже не может создать каталоги с общей длиной пути более 255 байт. Проверял.
Ratings: 0 negative/0 positive
Re: И снова про copy file
tata

Сообщений: 3469
Откуда: Йошкар-Ола
Дата регистрации: 23.10.2005
TAS
Посмотрите FileSystemObject!
Пример использования, что-то вроде:

loFSO = CREATEOBJECT('Scripting.FileSystemObject')
loFSO.CopyFile ("c:\mydocuments\letters\*.doc", "c:\tempfolder\")

Хорошую ссыль нашел: celitel.info
Пробовала и FSO, и WSH.
FSO сообщает, что OLE Dispath code 0. ...
Ratings: 0 negative/0 positive
Re: И снова про copy file
tata

Сообщений: 3469
Откуда: Йошкар-Ола
Дата регистрации: 23.10.2005
Перминов Игорь
Попробуйте сделать CMD-файл с командой
ROBOCOPY "<from>" "<to>" /FFT /MIR /R:3 /W:5 /TEE /FP /NDL /NP
Где from - содержимое addbs(isxpath1)
А to - содержимое copypat2
Если все нормально будет, то можно такой файл делать и запускать командой RUN
* Пример
*
ROBOCOPY "d:\asdfafasdf\adsfdf\adfasdfas\adfafasd\a.txt" "e:\tutyuuty\tyututu\tyututu\tyututy\tyutyut\b.txt" /FFT /MIR /R:3 /W:5 /TEE /FP /NDL /NP
Результат ошибка недопустимый параметр #3
Причём убрала вообще по очереди все параметры, оставила только откуда и куда, все равно параметр 3 недопустимый.
А так идея интересная, можно было бы через WSH.run запускать.
Может ещё из-за русских буковок в путях глючить.
Например, в CMD строка выглядит так:
Robocopy "G:\Baza\Podtv\pochta\пособие на погребение_ 010003000020190847.pdf" to "g:\baza\картотека сэд\03 звенигово\массивы\05_2019\п-2п\почта\07\zipsedfiles8047\пособие на погребение_ 010003000201908047 подтверждение.pdf" /FFT/ MIR



Исправлено 1 раз(а). Последнее : tata, 23.05.19 13:30
Ratings: 0 negative/0 positive
Re: И снова про copy file
Penner

Сообщений: 4102
Откуда: Muenster
Дата регистрации: 26.04.2002
пробелы?


------------------
Никогда не откладывайте на завтра, то, о чем можно забыть навсегда
Ratings: 0 negative/0 positive
Re: И снова про copy file
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
tata
Например, в CMD строка выглядит так:
Robocopy "G:\Baza\Podtv\pochta\пособие на погребение_ 010003000020190847.pdf" to "g:\baza\картотека сэд\03 звенигово\массивы\05_2019\п-2п\почта\07\zipsedfiles8047\пособие на погребение_ 010003000201908047 подтверждение.pdf" /FFT/ MIR
у меня с такими путями/именами все работает (ось - win8.1)
lcFn1 = "d:\Baza\Podtv\pochta\пособие на погребение_ 010003000020190847.pdf"
lcFn2 = "d:\baza\картотека сэд\03 звенигово\массивы\05_2019\п-2п\почта\07\zipsedfiles8047\пособие на погребение_ 010003000201908047 подтверждение.pdf"
md (justpath(lcFn1))
md (justpath(lcFn2))
strtofile("test", lcFn1)
copy file (lcFn1) to (lcFn2)
Ratings: 0 negative/0 positive
Re: И снова про copy file
Burn

Сообщений: 5644
Откуда: Днепр
Дата регистрации: 02.01.2002
vk65
у меня с такими путями/именами все работает
В этих путях меньше 260 символов.
В WinAPI это ограничение прошито. В десятке, говорят, его можно обойти правкой реестра.

2tata
Может эти советы помогут?
litl-admin.ru



Исправлено 1 раз(а). Последнее : Burn, 23.05.19 15:28
Ratings: 0 negative/0 positive
Re: И снова про copy file
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
Burn
vk65
у меня с такими путями/именами все работает
В этих путях меньше 260 символов.
Это понятно. Просто, если это был реальный пример, то проблема не в ограничении на длину пути.
Ratings: 0 negative/0 positive
Re: И снова про copy file
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
Трете и трете, трете и трете.
Хоть бы кто реальный демо код приложил. С созданием каталогов и файлов и копированием.
10-20 строк.
Я сделал, но винда говорит х.н.н. если полная длина пути больше 256/260 символов.
По крайне мере под XP так.
Ну и о чем говорить?
Только о том что: Постановщик задачи (не Таня) фуфел. Это технически невозможно.
А так то да. Пенсии еще лет на 10 сдвинут.
Ratings: 0 negative/0 positive
Re: И снова про copy file
of63
Автор

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Чуть менее чем все программы работать в глубоком вложении, и с глубокими файлами, не будут, и не работают (моя не работате, когда ее загоняют в мои документы, и там далее в глубь, со странными именами папок). Но дальний файл достать можно, если не указывать длинные (полные) имена. Можно все это проверить в черном "Дос" окне, применяя команду cd (она же SET DEFAULT). Попозже попробую.
Ratings: 0 negative/0 positive
Re: И снова про copy file
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
of63
Чуть менее чем все ...
Наибулины и как там все в прочих дальше типа ПФР`ах.

Решение принять (в отношении народа) кто? - ноль
Возразить о непраприльном принятии решении (в отношении народа) - ноль.
За зарплатой кто первый? Хули, мы.

Я видел в ЦБ Геращенко. Перед восьмым ноям. Может даже за руку здоровались.
Я в кабинетах коньяка пивал.
Я был в то время "тама".

Другая эпоха.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 33 (Гостей: 33)

© 2000-2024 Fox Club 
Яндекс.Метрика