I always assumed that if I wrote:
Code: Select all
loc := Files.dir.This ("D:\Data\ProjectX");
However that does not seem to be the case.
What is the easiest way to test if a specific path exists?
Thanks
Robert
Code: Select all
loc := Files.dir.This ("D:\Data\ProjectX");
Code: Select all
MODULE PrivTest;
IMPORT Log, Files;
PROCEDURE Do*;
VAR info: Files.LocInfo;
BEGIN
info := Files.dir.LocList(Files.dir.This ("D:\Data\ProjectX"));
IF info = NIL THEN
Log.String("No such folder"); Log.Ln
ELSE
WHILE info.next # NIL DO
Log.String(info.name); Log.Ln;
info := info.next
END
END
END Do;
END PrivTest.
Code: Select all
loc := Files.dir.This ("D:\Data\ProjectX");
IF loc.res = 0 ...
Code: Select all
MODULE CasketShlwapiDll ["shlwapi.dll"];
IMPORT SYSTEM, Win := WinApi;
PROCEDURE PathFileExistsW* (path : Win.PtrWSTR) : Win.BOOL;
END CasketShlwapiDll.
Code: Select all
PROCEDURE PathExists* (path : ARRAY OF CHAR) : BOOLEAN;
VAR
k, m : INTEGER;
chr : CHAR;
BEGIN
k := 0; m := -1;
REPEAT
chr := path [k];
IF (chr = '/') OR (chr = '\') THEN m := k END;
INC (k);
UNTIL chr = 0X;
path [m] := 0X;
RETURN Shlwapi.PathFileExistsW (path) = WinApi.TRUE
END PathExists;
This file must be named "readme.txt" and must be in folder "C:\abc\def".
It is necessary for the proper functioning of the application.
Code: Select all
VAR fLoc: Files.Locator; f: Files.File;
fLoc := Files.dir.This("C:\abc\def");
f := Files.dir.Old(fLoc, "readme.txt", Files.shared);
IF fLoc.res # 0 THEN
Error. Folder does not exist
ELSE
f.Close();
END;
Code: Select all
MODULE CasketShlwapiDll ["shlwapi.dll"];
IMPORT SYSTEM, Win := WinApi;
PROCEDURE PathIsDirectoryW* (path : Win.PtrWSTR) : Win.BOOL;
END CasketShlwapiDll.
Code: Select all
PROCEDURE TrimTail (VAR path : ARRAY OF CHAR);
VAR
k, m : INTEGER;
chr : CHAR;
BEGIN
k := 0; m := -1;
REPEAT
chr := path [k];
IF (chr = '/') OR (chr = '\') THEN m := k END;
INC (k)
UNTIL chr = 0X;
path [m + 1] := 0X
END TrimTail;
PROCEDURE IsDirectory* (path : ARRAY OF CHAR; trimTail : BOOLEAN) : BOOLEAN;
BEGIN
IF trimTail THEN TrimTail (path) END;
RETURN Shlwapi.PathIsDirectoryW (path) # WinApi.FALSE
END IsDirectory;
Code: Select all
MODULE HostFiles;
...
PROCEDURE GetPath (IN fname: FullName; OUT path: FullName);
VAR i: INTEGER;
BEGIN
path := fname$; i := LEN(path$);
WHILE (i > 0) & (path[i] # "\") & (path[i] # "/") & (path[i-1] # ":") DO DEC(i) END;
path[i] := 0X
END GetPath;
I have a list of 5 that I think are of general utility and I find difficult in standard BlackBox.Josef Templ wrote:It may make sense indeed to add two functions ...
Code: Select all
PROCEDURE CopyFile (IN srcName, dstName: ARRAY OF CHAR; buildPath, allowOverwrite: BOOLEAN): BOOLEAN;
PROCEDURE CreateDirectory (IN path: ARRAY OF CHAR): BOOLEAN;
PROCEDURE CreatePath (IN path: ARRAY OF CHAR; trimTail: BOOLEAN; OUT cnt: INTEGER);
PROCEDURE IsDirectory (path: ARRAY OF CHAR; trimTail: BOOLEAN): BOOLEAN;
PROCEDURE PathFileExists (name: ARRAY OF CHAR; trimTail: BOOLEAN): BOOLEAN;