Run

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Подскажите, пожалуйста, почему может не выполняться команда RUN()
Требуется создать директорию из клариона.
в external процедуре пишу:

DosCommand String(100)

DosCommand='mkdir Trn\20040322'
run(CLIP(LEFT(DosCommand)),1)
или просто:
run('mkdir Trn\20040322',1)

message('Ошибка DOS='&RUNCODE())
возвращает: -4
if errorcode()
возвращает 2 - File not found

Clarion 5.0, ШВС, Win98SE

С уважением, Николай.

(Добавление)

Данный вопрос не раз уже подымался в эхе.
Зачем так извращаться.
В Clarion run time есть всё базовое сишное ядро.
Используйте нормальную функцию создания дирректорий

MkDir(*cstring),short,raw,name('_mkdir')

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com

Спасибо, попробую.
Но сработало и:

run('command.com /c mkdir trn\20040322',1)

С уважением, Николай.

Под Win2000 работает
DosCommand='cmd.exe /c mkdir \trn\20040322'
RUN(CLIP(LEFT(DosCommand)),1)

С уважением, Михаил

У меня Windows 98SE

Как то я сумбурно написал, на всякий случай повторю.
в external процедуре:

Код: Выделить всё

 
DosCommand   String(100)
tDatePath         String(100)
 
    CODE
 
    tSelfPath=Path()
    tStrDate=FORMAT(Year(gvArhivDate),@n04)&FORMAT(Month(gvArhivDate),@n02)&FORMAT(Day(gvArhivDate),@n02)
    tDatePath=CLIP(LEFT(tSelfPath))&'\Trn\'&CLIP(LEFT(tStrDate))      ! директория "Trn" - уже существует
    setPath(CLIP(LEFT(tDatePath)))      ! Если директории еще не существует
    if errorcode()     ! возвращает 3 - "Path Not Found"
       DosCommand='mkdir Trn\'&CLIP(LEFT(tStrDate))
       run(CLIP(LEFT(DosCommand)),1)
       if RUNCODE()
         message('Ошибка DOS='&RUNCODE())     ! возвращает -4
        if errorcode()
            message('Ошибка создания директории - '&tDatePath&' - '&error())     ! возвращает "File not found" (2)
            return
         .
       .
    .
С уважением, Николай.

"mkdir" - это внутренняя команда интерпретатора DOS, ну и надо её через интерпретатор вызывать
DosCommand='command.com /c mkdir \trn\20040322'
RUN(CLIP(LEFT(DosCommand)),1)

В Win2000 вместо command.com - cmd.exe

А директории создавать действительно лучше как Андрей Мялин написал.
Михаил
А директории создавать действительно лучше как Андрей Мялин написал.
Угу, только вот сишная MkDir неправильно работает с длинными/русскими именами. Вот CreateDirectory из WinAPI - самое оно...

---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Написал: ClaList(2)
Гость

Сообщение Гость »

Дай команду:
Run(Command('Comspec',0) & '/c Mkdir Trn\20040322')

Написал: Anatoly(38)
Гость

Сообщение Гость »

Скорее всего причина в том, что mkdir - внутренняя команда командного процессора COMMAND.COM
Когда эта команда выполняется из DOS-строки, то Винда перенаправляет ее этому процессору и уже он ее выполняет.
Так что, попробуй что-то типа:

RUN('command.com /c mkdir Trn\20040322',1)

Если мне не изменяет память, то что-то про это написано (или, по крайней мере, раньше было написано) в доке.

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru
Написал: ClaList(2)
Гость

Сообщение Гость »

Спасибо всем, вопрос решен.

С уважением, Николай.
Написал: ClaList(2)
Ответить