Shafayat Posted April 22, 2010 Posted April 22, 2010 Function for checking if a File/Directory Path is Validexpandcollapse popup#include-once ; #INDEX# ======================================================================================================================= ; Title .........: _FileIsPathValid UDF ; AutoIt Version : 3.3.6+ ; Language ......: English ; Description ...: Function for checking if a File/Directory Path is Valid ; Author(s) .....: Shafayat (sss13x@yahoo.com) ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ; _FileIsPathValid() ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name...........: _FileIsPathValid ; Description ...: checks if a File/Directory Path is Valid ; Syntax.........: _FileIsPathValid($Path, $Verbose = 0) ; Parameters ....: $Path - File/Directory Path to work with ; $Verbose - OutPut (ConsoleWrite) additional information of invalidity of Path ; |0 - No OutPut ; |1 - OutPut to Console if Not Compiled ; |1 - OutPut to Console Always ; Return values .: Success - True ; Failure - False ; Author ........: Shafayat (sss13x@yahoo.com) ; Example .......: Yes ; =============================================================================================================================== Func _FileIsPathValid($Path, $Verbose = 0) Local $PathOri = $Path Local $Excluded[8] = [7, "\\", "?", "*", '"', "<", ">", "|"] ;List of invalid characters Local $Alphabet = StringSplit("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "") Local $Reasons = "" Local $Valid = True ; Lenght Check If StringLen($Path) < 4 Then $Reasons = $Reasons & @CRLF & "LENGTH: Entire Pathname must be more than 3 characters (including drive)." $Valid = False EndIf ; Drive Check Local $pos = StringInStr($Path, ":\") If $pos <> 2 Then $Reasons = $Reasons & @CRLF & 'STRUCTURE: Drive letter must be one chars long and must be followed by ":\".' $Valid = False Else Local $chrdrv = StringUpper(StringLeft($Path, 1)) Local $found = 0 For $i = 0 To $Alphabet[0] If $chrdrv = $Alphabet[$i] Then $found = 1 EndIf Next If $found = 0 Then $Reasons = $Reasons & @CRLF & "ILLEGAL CHARACTER: Illegal character used as drive letter." $Valid = False EndIf EndIf $Path = StringTrimLeft($Path, 3) ; Path + Name Check For $i = 0 To $Excluded[0] If StringInStr($Path, $Excluded[$i]) <> 0 Then $Reasons = $Reasons & @CRLF & "ILLEGAL CHARACTER: " & $Excluded[$i] $Valid = False EndIf Next If $Verbose = 2 And $Valid = False Then ConsoleWrite(@CRLF & "Invalid Path: " & $PathOri & $Reasons & @CRLF) If $Verbose = 1 And $Valid = False And @Compiled = False Then ConsoleWrite(@CRLF & "=============" & @CRLF & "Invalid Path: " & $PathOri & $Reasons & @CRLF) Return $Valid EndFunc ;==>_FileIsPathValidSample:#include "_FileIsPathValid.au3" $path = "d:\GooodBoy.au3" MsgBox(0, $path, _FileIsPathValid($path, 1)) $path = "d:\Goo>odB\oo\oy.au3" MsgBox(0, $path, _FileIsPathValid($path, 1)) $path = "jook:\Gooo*dBo\\?y.au3" MsgBox(0, $path, _FileIsPathValid($path, 1)) $path = "sadasds?y.au3" MsgBox(0, $path, _FileIsPathValid($path, 1))_FileIsPathValid.zip [Not using this account any more. Using "iShafayet" instead]
MrCreatoR Posted April 22, 2010 Posted April 22, 2010 Nice, but can be done using only RegExp:$sPath = "D:\GooodBoy.au3" $iPathIsValid = _FilePathIsValid($sPath) ConsoleWrite($iPathIsValid & @LF) $sPath = "D:\Not*GooodBoy.au3" $iPathIsValid = _FilePathIsValid($sPath) ConsoleWrite($iPathIsValid & @LF) Func _FilePathIsValid($sPath) Local $sInvalid_Chars = '*?|:<>"/' Local $sPattern = '(?i)^[a-z]:([^\Q' & $sInvalid_Chars & '\E]+)?(\\[^\Q' & $sInvalid_Chars & '\E\\]+)?(\.[^\Q' & $sInvalid_Chars & '\E\\\.]+|\\)?$' Local $iPathIsValid = StringRegExp($sPath, $sPattern) Return $iPathIsValid EndFuncP.SThere is also my _FileGetValidName() UDF, wich will return the valid name. Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team
MrCreatoR Posted April 22, 2010 Posted April 22, 2010 And here is the same but returns the valid path as well (optional):expandcollapse popup$sPath = "D:\GooodBoy.au3" $iPathIsValid = _FilePathIsValid($sPath) ConsoleWrite($iPathIsValid & @LF) $sPath = "D:\Not*GooodBoy.au3" $sPathValid = _FilePathIsValid($sPath, 1, '_') ConsoleWrite("PathIsValid ==> " & @extended & @LF & "Valid Name ==> " & $sPathValid & @LF) Func _FilePathIsValid($sPath, $iRetValid = 0, $sReplaceChar = '') Local $sInvalid_Chars = '*?|:<>"/' Local $sPattern = '(?i)^([a-z]:\\?)([^\Q' & $sInvalid_Chars & '\E]+)?(\\[^\Q' & $sInvalid_Chars & '\E\\]+)?(\.[^\Q' & $sInvalid_Chars & '\E\\\.]+|\\)?$' Local $iPathIsValid = StringRegExp($sPath, $sPattern) If $iRetValid = 1 And Not $iPathIsValid Then Local $iLastCharIsSlash = (StringRight($sPath, 1) = '\') Local $aPathSplit = StringSplit(StringRegExpReplace($sPath, '\\+$', ''), '\') Local $sValidName $sPath = '' For $i = 2 To $aPathSplit[0] - 1 $sValidName = StringRegExpReplace($aPathSplit[$i], '[\Q' & $sInvalid_Chars & '\E]', $sReplaceChar) If $sValidName <> '' Then $sPath &= $sValidName & '\' EndIf Next $sPath &= StringRegExpReplace($aPathSplit[$aPathSplit[0]], '[\Q' & $sInvalid_Chars & '\E]', $sReplaceChar) $sPath = StringLeft(StringRegExpReplace($aPathSplit[1], '[\Q' & $sInvalid_Chars & '\E]', $sReplaceChar), 1) & ':\' & $sPath If $iLastCharIsSlash Then $sPath &= '\' EndIf Return SetExtended(0, $sPath) EndIf Return $iPathIsValid EndFunc Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team
Shafayat Posted April 23, 2010 Author Posted April 23, 2010 Thank you for the regexp trick. I am finally starting to get to understand regexp. But I'm not still fluent in it. I needed that functionality in my latest project so I scraped up it in the way I can think. regards Shafayat [Not using this account any more. Using "iShafayet" instead]
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now