Создание каталога из программы

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Закрыто
Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 9:33
Откуда: Томск

Создание каталога из программы

Сообщение Anatoly »

Windows Xp Sp3, Clarion 6.3
Столкнулся с такой проблемой - необходимо создавать каталоги, а в Clarion такой команды нет.
Api функция CreateDirectoryA(Clip(NameDir)) !– выдает Ошибка=0, но каталог не создается
Api функция SHCreateDirectoryExA(Clip(NameDir)) !– выдает Ошибка=161, каталог не создается
Run('Command.com /c MkDir ‘ & Clip(NameDir),1) !– выдает Ошибка=0, но каталог не создается
Run('MkDir ‘ & Clip(NameDir),1) ! – выдает Ошибка=’File not found’, каталог не создается
Пришлось делать через Bat файл.
Run('MkDir.bat',1)

Кто подскажет как это сделать по человечески?
Alex_G
Бывалый
Сообщения: 77
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

Re: Создание каталога из программы

Сообщение Alex_G »

Api функция CreateDirectoryA работает нормально. Если надо создать несколько вложенных папок, создавать надо последовательно.


Module('Windows.DLL')
CreateDirectoryA(*CSTRING,*SECURITY_ATTRIBUTES),SIGNED,PASCAL,RAW
End

BuildDir ROUTINE ! создать полный путь доступа
DATA
MkPath CSTRING(255)
RcCode Long
GROUP_SECURITY_ATTRIBUTES GROUP
nLength LONG
lpSecurityDescriptor LONG
bInheritHandle BOOL
END
CODE
Nst# = 1
LOOP
N# = INSTRING('\',NAME(File),1,Nst#) ! найти слэш
IF N# ! если слэш найден, то
Nt# = INSTRING('\',NAME(File),1,N#+1) ! найти след. слэш
IF Nt# ! если есть след. слэш, то
IF SUB(NAME(File),Nt#+1,1) = '!' ! если это элемент таблицы в одном файле, то
BREAK ! закончить
.
ELSE ! если нет след. слэша, то
IF SUB(NAME(File),N#+1,1) = '!' ! если это элемент таблицы в одном файле, то
BREAK ! закончить
.
.
MkPath = SUB(NAME(File),1,N#-1)
RcCode=CreateDirectoryA(MkPath,GROUP_SECURITY_ATTRIBUTES)
ELSE
BREAK
.
Nst# = N# + 1
.
George
Активист
Сообщения: 110
Зарегистрирован: 04 Август 2009, 10:48
Благодарил (а): 1 раз

Re: Создание каталога из программы

Сообщение George »

В Clarion есть функция CREATEDIRECTORY. Прекрасно работает - я ей пользуюсь.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Re: Создание каталога из программы

Сообщение Игорь Столяров »

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

Например создание папки в каталоге БД программы:
If ~Exists(Clip(Left(System{Prop:DataPath})) & 'Base') then I# = CreateDirectory(Clip(Left(System{Prop:DataPath})) & 'Base').
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3963
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 29 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Создание каталога из программы

Сообщение Admin »

Anatoly писал(а):Кто подскажет как это сделать по человечески?
cwutil - идет в комплекте с Clarion 6.3

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

INCLUDE('cwutil.inc') 
И вперед из этого набора

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

  MODULE('cwutil.clw')
    ! changes in these prototypes need to be reflected in BLOBSRV.TPW
    OSVersion( ),STRING
    FileExists( STRING sFile ), BYTE
    WindowExists( STRING sWindow ), BYTE
    ValidateOLE( SIGNED OleControl, <STRING OleFileName>, <STRING OleCreateName> ), BYTE
    GetUserName( ),STRING
    BeginUnique( STRING sAppName ),LONG
    EndUnique( LONG hUnique )
    IsTermServer( ),BYTE
    GetFileTime( STRING iFile, BYTE bType=0 ),LONG
    GetFileDate( STRING iFile, BYTE bType=0 ),LONG
    CreateDirectory( STRING sDirectory ), BYTE,PROC
    RemoveDirectory( STRING sDirectory ), BYTE,PROC
    GetTempPath( ), STRING
    GetTempFileName( STRING sPrefix, <STRING sDirectory> ),STRING
    FullDrag( <LONG lDragSetting> ),LONG,PROC
    LongToHex(ULONG, BYTE LowerCase = FALSE),STRING
    ShortToHex(USHORT, BYTE LowerCase = FALSE),STRING
    ByteToHex(BYTE, BYTE LowerCase = FALSE),STRING
    FileToBLOB(STRING name, *BLOB b),SIGNED
    BLOBToFile(*BLOB b, STRING name),SIGNED
    ResizeImage(SHORT pOriginalControl,SHORT pOrigianlXPos,SHORT pOriginalYPos,SHORT pOriginalWidth,SHORT pOriginalHeight,<REPORT pReport>)
    ColorToHSL(LONG pColor,*REAL H,*REAL S,*REAL L)
    ColorToRGB(LONG pColor,*BYTE R,*BYTE G,*BYTE B)
    MaxByteValue(BYTE A,BYTE B,BYTE C),BYTE
    MinByteValue(BYTE A,BYTE B,BYTE C),BYTE
    HSLToColor(REAL H,REAL S,REAL L,*LONG pColor)
    RGBToColor(BYTE R,BYTE G,BYTE B,*LONG pColor)
    MixColors(LONG pColor1,LONG pColor2,BYTE pPercentageMix),LONG
  END
  MODULE('Core')
    PathSplit(CONST *CSTRING path, <*CSTRING drive>, <*CSTRING dir>, <*CSTRING file>, <*CSTRING ext>), SIGNED, PROC, RAW, NAME('_fnsplit')
    PathMerge(*CSTRING path, <*CSTRING drive>, <*CSTRING dir>, <*CSTRING file>, <*CSTRING ext>), SIGNED, PROC, RAW, NAME('_fnmerge')
  END
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 9:33
Откуда: Томск

Re: Создание каталога из программы

Сообщение Anatoly »

Спасибо всем ответившим!
Закрыто