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)
Кто подскажет как это сделать по человечески?
Создание каталога из программы
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Re: Создание каталога из программы
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
.
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
.
Re: Создание каталога из программы
В 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').
Например создание папки в каталоге БД программы:
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: Создание каталога из программы
cwutil - идет в комплекте с Clarion 6.3Anatoly писал(а):Кто подскажет как это сделать по человечески?
Код: Выделить всё
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
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса