1 // ----------------------------------------------------------------------------
3 // ----------------------------------------------------------------------------
7 static char *VB_Name = "PathTools_Module";
9 // --- Option Compare Text
11 // ########### Quote & UnQuote ##################################################
13 void UnQuote(char *ST)
18 while (STRING_IS_LIKE(ST, "\"*"))
20 ST = Right(ST, L - 1);
24 while (STRING_IS_LIKE(ST, "*\""))
32 if (! STRING_IS_LIKE(ST, "\"*"))
35 if (! STRING_IS_LIKE(ST, "*\""))
39 char *UnQuoted(char *STRG)
48 while (STRING_IS_LIKE(ST, "\"*"))
50 ST = Right(ST, L - 1);
54 while (STRING_IS_LIKE(ST, "*\""))
64 char *Quoted(char *STRG)
71 if (! STRING_IS_LIKE(ST, "\"*"))
74 if (! STRING_IS_LIKE(ST, "*\""))
82 // ############ Path-/FileName-Extraction and concatanation ######################
84 char *StripDir(char *Path)
96 StripDir = StrReverse(Right(T, strlen(T) - i));
101 char *StripFileName(char *Path)
108 T = StrReverse(Path);
109 if (STRING_IS_LIKE(T, "/*"))
110 T = Right(T, strlen(T) - 1);
112 i = InStr(1, T, "/");
119 StripFileName = StrReverse(Left(T, i - 1));
121 return StripFileName;
124 char *StripExtension(char *Path)
126 char *StripExtension;
131 T = StrReverse(Path);
132 iSlash = InStr(1, T, "/");
133 i = InStr(1, T, ".");
134 if ((i < 2) || (iSlash < i))
137 StripExtension = StrReverse(Left(T, i - 1));
139 return StripExtension;
142 char *NewExtension(char *Path, char *NewExt)
146 // NewExtension("C:\MyPath\MyFile.Old","New") returns "C:\MyPath\MyFile.New"
147 // NewExtension("C:\MyPath.dir\MyFile","New") returns "C:\MyPath\MyFile.New"
149 long i, iSlash, ELen;
151 T = StrReverse(Path);
152 iSlash = InStr(1, T, "/");
153 i = InStr(1, T, ".");
154 if ((i < 1) || (iSlash < i))
159 NewExtension = CAT(Left(StrReverse(T), strlen(T) - i), ".", NewExt);
164 char *StripExtensionlessFileName(char *Path)
166 char *StripExtensionlessFileName;
171 T = StripFileName(Path);
172 T2 = StripExtension(Path);
173 StripExtensionlessFileName = Left(T, strlen(T) - strlen(T2) - (0 < strlen(T2) ? 1 : 1));
175 return StripExtensionlessFileName;
178 char *WithSlash(char *Path)
182 if (STRING_IS_LIKE(Path, "*/"))
188 WithSlash = CAT(Path, "/");
194 char *SlashLess(char *Path)
199 while (STRING_IS_LIKE(SlashLess, "*/"))
201 SlashLess = Left(Path, strlen(Path) - 1);
207 // ############ File-/Diresctory-Operations ######################################
209 boolean FileExists(char *Path)
213 if ((STRING_IS_LIKE(Dir(Path), "")) || (STRING_IS_LIKE(Path, "")))
221 void MayKill(char *Path)
224 // --- On Error GoTo MayKillEH
229 boolean IsDir(char *Path)
234 // --- On Error Resume Next
235 IsDir = (vbDirectory == (GetAttr(Path) & vbDirectory));
242 // ######### binary comparison of files ##########################################
244 boolean FilesEqual(char *Path1, char *Path2)
250 boolean b1Open, b2Open;
254 // Debug.Assert(FileExists(Path1));
255 // Debug.Assert(FileExists(Path2));
256 if (! (FileExists(Path1) && FileExists(Path2)))
259 nSize = FileLen(Path1);
260 if (nSize != FileLen(Path2))
263 bin1 = REDIM_1D(sizeof(byte), 0, nSize + 1 - 1);
264 bin2 = REDIM_1D(sizeof(byte), 0, nSize + 1 - 1);
268 // --- On Error GoTo FilesEqualEH
269 // FNum1 = FreeFile();
270 FNum1 = fopen(Path1, "rb");
272 FILE_GET(FNum1, -1, &bin1, sizeof(bin1));
275 // FNum2 = FreeFile();
276 FNum2 = fopen(Path2, "rb");
278 FILE_GET(FNum2, -1, &bin2, sizeof(bin2));
281 // --- On Error GoTo 0
283 for (i = 1; i <= nSize; i++)
285 if (bin1[i] != bin2[i]) // return false