Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с папками. / 25 сообщений из 27, страница 1 из 2
21.01.2013, 13:18
    #38117913
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Задачка простая. создавать и хранить 3 копии одной и той же папки с изменениями.
1) копия - это текущая рабочая папка
2) последня копися папки
3) предпоследняя копия папки.

Хочу сделать просто проверяю есть ли 2 копия. если нет создаю папку bkp и копирую туда данные тут проблем нет.
а вот с третьей копией думается мне сделать так. перед тем как делать копию 2 проверить есть ли папка bkp если нет то смотрю есть ли копия 3 (т.е. есть ли в наличии папка bkp_old). Если есть папка bkp_old существует то я ее удаляю, если нет то переименовываю папку bkp в bkp_old. Вроде все просто.

Работаю с Shell однако если выполняю
Код: vbnet
1.
shell "rename "c:\bkp" bkp_old


получаю ошибку FILE NOT FOUND. Эта же команда в cmd выполняется без проблем.
Ладно время поджимает дай думаю через FSO попробую пишу:
Код: vbnet
1.
2.
3.
4.
5.
dim sfo as FileSystemObject
dim fld as Folder

set fso=CreateObject("Scripting.FileSystemObject")
set fld=fso.GetFolder("c:\")



и на последней строчке Type Mismatch. Чертовщина какая то.

Где я ошибаюсь?
...
Рейтинг: 0 / 0
21.01.2013, 13:22
    #38117922
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Alex_menРаботаю с Shell однако если выполняюКавычки удвоить (ну или не нужны они вообще, так как нет пробелов в пути)
...
Рейтинг: 0 / 0
21.01.2013, 13:25
    #38117927
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Alex_menи на последней строчке Type Mismatch. Чертовщина какая то.

Где я ошибаюсь?Ответ тут
...
Рейтинг: 0 / 0
21.01.2013, 13:34
    #38117945
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,
С кавычками вроде должен быть порядок. Кавычки нужны для папок содержащих пробелы на старых версиях винды.Сделал так:
Код: vbnet
1.
2.
3.
4.
5.
6.
strIst="c:\bkp"
strDest="bkp_old"

strShell="rename """ & strIst & """ " & strDest & ""

shell strShell



msgbox strshell отображает : rename "c:\bkp" bkp_old , т.е. дело не в кавычках, да и пробовал я их убирать. Пробовал давать команду

Код: vbnet
1.
strShell="move """ & strIst & """ " & strDest & ""


Эффект тот же. File NOT FOUND. Пробовал добавлять убирать слеш в конце пути и имени искомой папки.
...
Рейтинг: 0 / 0
21.01.2013, 13:36
    #38117948
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,

OPTION EXPLICIT использую всегда.
...
Рейтинг: 0 / 0
21.01.2013, 13:38
    #38117956
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Alex_menЭффект тот же. File NOT FOUND.А, вспомнил, для Shell нужно указать полный путь к файлу. Используй ShellExecute
...
Рейтинг: 0 / 0
21.01.2013, 13:38
    #38117958
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Alex_menOPTION EXPLICIT использую всегда.Не верю:
Код: vbnet
1.
2.
3.
4.
5.
dim sfo as FileSystemObject
dim fld as Folder

set fso=CreateObject("Scripting.FileSystemObject")
set fld=fso.GetFolder("c:\")
...
Рейтинг: 0 / 0
21.01.2013, 13:40
    #38117964
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.ProAlex_menOPTION EXPLICIT использую всегда.Не верю:
Код: vbnet
1.
2.
3.
4.
5.
dim sfo as FileSystemObject
dim fld as Folder

set fso=CreateObject("Scripting.FileSystemObject")
set fld=fso.GetFolder("c:\")



Впрочем, возможно в коде у тебя есть две переменных, sfo и fso, обе объявлены, просто ты не ту используешь
...
Рейтинг: 0 / 0
21.01.2013, 14:02
    #38118017
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,

да нет же! тут просто опечатался. элемент FSO один. и Option explicit тоже есть все проверил.

библиотеки scripting runtime и ShellControls подключены.

c ShellExecute вопрос вот какой. На самом деле я использую утилиту контроля завершения выполнения вот она процесс переименования не запускает.А Shell я использовал чтобы проверить в чем может быть ошибка. И уж никак не ожидал увидеть FileNotFound.
...
Рейтинг: 0 / 0
21.01.2013, 14:10
    #38118035
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Код: vbnet
1.
2.
3.
4.
Dim fso As FileSystemObject
Dim fld As Folder
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder("c:\")

вот этот код у меня ошибок не выдает.
...
Рейтинг: 0 / 0
21.01.2013, 14:12
    #38118036
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,

выполнил вот таким образом
Код: vbnet
1.
"cmd /c rename " & strIst & " " & strDest



По свойствам cmd кавычки в пути вопринимаются только для запуска исполняемых файлов. Хотя если в самой командной строке набираю с кавычками, то проблем не возникает. Отношу это на счет того что испытываю на ХР, сейчас еще попробую если в пути будут пробелы.
...
Рейтинг: 0 / 0
21.01.2013, 14:22
    #38118056
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Alex_men,

В общем все дело в свойствах запуска командной строки, точнее ограничений на использование кавычек.

решение получилось вот каким:

Код: vbnet
1.
2.
3.
4.
5.
if instr(strIsh," ")<>0 then
        strShell="cmd /c rename """ & strIst & """ " & strDest & ""
   else
         strShell="cmd /c rename " & strIst & " " & strDest
end if
...
Рейтинг: 0 / 0
21.01.2013, 14:25
    #38118059
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro
Код: vbnet
1.
2.
3.
4.
Dim fso As FileSystemObject
Dim fld As Folder
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder("c:\")

вот этот код у меня ошибок не выдает.

Да в том то и дело. Тупо копирую этот код и TypeMismatch
...
Рейтинг: 0 / 0
21.01.2013, 14:28
    #38118063
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
проверь в момент ошибки
Код: vbnet
1.
2.
3.
?TypeName(fso)
?TypeName(fld)
?TypeName(fso.GetFolder("c:\"))
...
Рейтинг: 0 / 0
21.01.2013, 14:34
    #38118074
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,

Соответственно по строкам получаю
FileSystemObject
Nothing
Folder
...
Рейтинг: 0 / 0
21.01.2013, 14:39
    #38118084
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,

При этом в соседней ветке (когда пака bkp не найдена) прекрасно отрабатывает код
Код: vbnet
1.
fso.CreateFolder "c:\bkp"
...
Рейтинг: 0 / 0
21.01.2013, 14:41
    #38118085
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Попробуй
Код: vbnet
1.
Dim fld As Scripting.Folder
...
Рейтинг: 0 / 0
21.01.2013, 15:14
    #38118146
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.ProПопробуй
Код: vbnet
1.
Dim fld As Scripting.Folder



Эврика. так прошло.

С Shelom еще на засаду наткнулся. тренировался с папкой c:\123 преименовывается как хочешь и во что хочешь. а вот если пишу c:\BKP все приехали.

Есть мысль что проблема в кодовой странице, НО! как то это странно
...
Рейтинг: 0 / 0
21.01.2013, 15:25
    #38118166
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Alex_menЭврика. так прошло.значит у тебя где-то существует класс или тип Folder (в другой библиотеке или в самом проекте) и по умолчанию переменная объявлялась не того типа. Посмотреть можешь по F2
...
Рейтинг: 0 / 0
21.01.2013, 15:31
    #38118179
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,

А по переименованию символьного имени папки не сталкивались?
...
Рейтинг: 0 / 0
21.01.2013, 15:32
    #38118180
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
ВКР - это по-русски?
Попробуй латиницу
...
Рейтинг: 0 / 0
21.01.2013, 15:52
    #38118238
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.ProВКР - это по-русски?
Попробуй латиницу
это латиница. Вся заковыка оказалось в предшествующей команде Dir. Т.е. получается для кода:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if dir(app.path & "\bkp",vbDirectory)="" then
         fso.CreateFolder app.path & "\bkp"
     else
          if instr(strIsh," ")<>0 then
                 strShell="cmd /c rename """ & strIst & """ " & strDest & ""
             else
                 strShell="cmd /c rename " & strIst & " " & strDest
          end if
end if

shell strshell



команда
Код: vbnet
1.
dir(app.path & "\bkp",vbDirectory)=""

захватывает папку в монопольный режим для данного приложения. В остальных приложениях я переименовываю папку как хочу. вставив перед строчкой Shell проверку наличия папки bkp_old я перевел фокус на другой объект и Shell отработал как надо.

Шайтан однако, В хелпе такого не обозначено
...
Рейтинг: 0 / 0
23.01.2013, 10:26
    #38120843
Alex_men
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Shocker.Pro,

Немного разовью тему.

Предыдущие вопросы решены, теперь хочется навести красоту. Что не нравится в полученном решении:

1) когда выполняются строки Shell открываются черные окна CMD. Хотелось бы их спрятать, чтобы не мельтешили перед пользователем. У самой командной строки таких ключей не нашел. В интернете нашел вариант запуска через START. Но как я понял на сайте тех поддержки самого Микрософта работает корявенько.

2) пробовал использовать свойства FSO. Но столкнулся со странной проблемой. При попытке копировании файлов в созданные мною же папки идет ошибка доступа Permission Denaed

Есть какие то мысли как решить такую задачку?
...
Рейтинг: 0 / 0
23.01.2013, 10:30
    #38120855
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Alex_menпробовал использовать свойства FSO. Но столкнулся со странной проблемой. При попытке копировании файлов в созданные мною же папки идет ошибка доступа Permission Denaed
По фотографии мы не лечим. Показывайте код и цитату ошибки.
...
Рейтинг: 0 / 0
23.01.2013, 10:36
    #38120866
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с папками.
Но вообще я не понимаю, зачем используется VB, когда задача элементарно для VBS:

create fso
if folderexists(bak_2) then deletefolder(bak_2)
movefolder(bak_1,bak_2)
copyfolder(work,bak_1)

Добавить только приём-парсинг параметров и обработку ошибок...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с папками. / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]