Что нового

Как определить, что каталог является каталогом ?

VladUs

Скриптер
Сообщения
621
Репутация
181
Как определить, что каталог является каталогом, а не файлом ?

Накидал рабочий код (основаный на методе IsFolder, объекта Shell.Application), но не уверен, что он надежный.

Код:
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

$sFolder = "C:\Windows"
$IsFolder =  _IsFolder($sFolder)

If $IsFolder = 1 Then 
  ConsoleWrite($sFolder & " является папкой" & @CRLf )
Else
  ConsoleWrite($sFolder & " не является папкой"  & @CRLf)
EndIf

Func _IsFolder($sPathIsFolder)
        
    $objShell = ObjCreate("Shell.Application")
    If  IsObj($objShell) Then
    $objFolder = $objShell.NameSpace($sPathIsFolder)
      If Not IsObj($objFolder) Then
        $bStatus = 0
        Return $bStatus
      Else
      $objFolderItem = $objFolder.Self
        If IsObj($objFolderItem) Then
          $bReturn = $objFolderItem.IsFolder
          If $bReturn = True  Then
            $bStatus = 1
            Return $bStatus
          Else
            $bStatus = 0
            Return $bStatus
          EndIf
        EndIf
      EndIf 
    EndIf

Endfunc 

Func MyErrFunc() 
   $HexNumber=hex($oMyError.number,8) 
   ConsoleWrite("filled" & @CRLf)
Endfunc

Есть ли что - нибудь подобное в WinApi или быть может существует другой способ определить, что папка является папкой, а файл файлом.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
VladUs
Код:
Global $a[3]
$a[1]='C:\WINDOWS\system32'
$a[2]='C:\WINDOWS\system32\Shell32.dll'

For $i = 1 to 2
	If StringInStr(FileGetAttrib($a[$i]), "D") Then
		MsgBox(0, 'Message', 'Это папка'&@CRLF&$a[$i])
	Else
		MsgBox(0, 'Message', 'Это файл'&@CRLF&$a[$i])
	EndIf
Next
 
Верх