Page 1 of 1
How to check if a file exist?
Posted: Thu Jul 17, 2003 2:55 pm
by Hurga
Hi
I m a complete newby to purebasic. And i cant find a commmand to check if a file is already existing or not
Can s o help me please?
Thx
Posted: Thu Jul 17, 2003 3:01 pm
by Pupil
Check out the FileSize() command..
Posted: Thu Jul 17, 2003 3:04 pm
by wichtel
Code: Select all
If ReadFile(0,filenam$)
; file exists
Else
; file does not exist
EndIf
Posted: Thu Jul 17, 2003 3:09 pm
by Berikco
no need to open the file for reading
Code: Select all
If FileSize(FileName$) = -1
; file does not exist
endif
Posted: Thu Jul 17, 2003 8:20 pm
by Kale
Or:
To check for a file:
Code: Select all
If ExamineDirectory(1, ".", filename$) = 0
; file does not exist
Else
; file exists
EndIf
To check for a folder:
Code: Select all
If ExamineDirectory(1, foldername$, "*.*") = 0
; folder does not exist
Else
; folder exists
EndIf

Posted: Fri Jul 18, 2003 2:03 am
by Doobrey
wichtel wrote:Code: Select all
If ReadFile(0,filenam$)
; file exists
Else
; file does not exist
EndIf
Nope..that routine could fail if another app has already opened the file in exclusive mode..
Posted: Fri Jul 18, 2003 8:06 am
by wichtel
learned
I prefer now Kale's version.
Posted: Fri Jul 18, 2003 9:39 am
by Fred
The preferred way is the FileSize() one (faster, smaller..).
Re: How to check if a file or folder exists?
Posted: Mon Sep 06, 2021 10:23 am
by StarWarsFan
I wrote two short and simple (1 line!) procedures to do both, maybe it will be useful for somebody:
Code: Select all
Procedure ExistDIR(dir$) : ProcedureReturn ExamineDirectory(#PB_Any,dir$,"") : EndProcedure
Procedure ExistFILE(file$) : If FileSize(file$)>-1 : r=#True : Else : r=#False : EndIf : ProcedureReturn r : EndProcedure
Cheers!
Re: How to check if a file or folder exists?
Posted: Mon Sep 06, 2021 10:57 am
by NicTheQuick
StarWarsFan wrote: Mon Sep 06, 2021 10:23 am
I wrote two short and simple (1 line!) procedures to do both, maybe it will be useful for somebody:
Code: Select all
Procedure ExistDIR(dir$) : ProcedureReturn ExamineDirectory(#PB_Any,dir$,"") : EndProcedure
Procedure ExistFILE(file$) : If FileSize(file$)>-1 : r=#True : Else : r=#False : EndIf : ProcedureReturn r : EndProcedure
Cheers!
If you examine a directory you always have to finish it too with FinishDirectory(). You just created a memory leak.
Also if you read the help you can see that FileSize returns -2 if the path is a directory. So there is really no need for ExamineDirectory in the first place.
Re: How to check if a file or folder exists?
Posted: Mon Sep 06, 2021 11:08 am
by Kiffi
plus the unnecessary use of the variable 'r'.
Re: How to check if a file exist?
Posted: Mon Sep 06, 2021 11:32 am
by highend
So there is really no need for ExamineDirectory in the first place
There can be?
Try to find out (e.g. on Windows 7) if a file or folder in an overlong path exists.
FileSize() will report that it does not while ExamineDirectory() shows the correct result
Ofc the path is prefixed with "\\?\" | "\\?\UNC" (on a local / UNC path)
Re: How to check if a file or folder exists?
Posted: Mon Sep 06, 2021 1:47 pm
by Cyllceaux
StarWarsFan wrote: Mon Sep 06, 2021 10:23 am
I wrote two short and simple (1 line!) procedures to do both, maybe it will be useful for somebody:
Code: Select all
Procedure ExistDIR(dir$) : ProcedureReturn ExamineDirectory(#PB_Any,dir$,"") : EndProcedure
Procedure ExistFILE(file$) : If FileSize(file$)>-1 : r=#True : Else : r=#False : EndIf : ProcedureReturn r : EndProcedure
Cheers!
A little bit better
Code: Select all
Procedure ExistDIR(dir$) : ProcedureReturn Bool(FileSize(dir$) = -2): EndProcedure
Procedure ExistFILE(file$) : ProcedureReturn Bool(FileSize(file$) > -1) : EndProcedure
Re: How to check if a file exist?
Posted: Mon Sep 06, 2021 6:44 pm
by mk-soft
Macro is enough ...
Code: Select all
Macro ExistsDirectory(_directory_)
Bool(FileSize(_directory_) = -2)
EndMacro
Macro ExistsFile(_file_)
Bool(FileSize(_file_) > -1)
EndMacro