filutil.inc 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2012 by the Free Pascal development team
  4. File utility calls
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. {$ifndef SYSUTILS_HAS_UNICODESTR_FILEUTIL_IMPL}
  12. Function FileOpen (Const FileName : unicodestring; Mode : Integer) : THandle;
  13. begin
  14. Result:=FileOpen(ToSingleByteFileSystemEncodedFileName(FileName),Mode);
  15. end;
  16. Function FileCreate (Const FileName : UnicodeString) : THandle;
  17. begin
  18. Result:=FileCreate(ToSingleByteFileSystemEncodedFileName(FileName));
  19. end;
  20. Function FileCreate (Const FileName : UnicodeString; Rights : Integer) : THandle;
  21. begin
  22. Result:=FileCreate(ToSingleByteFileSystemEncodedFileName(FileName),Rights);
  23. end;
  24. Function FileCreate (Const FileName : UnicodeString; ShareMode : Integer; Rights : Integer) : THandle;
  25. begin
  26. Result:=FileCreate(ToSingleByteFileSystemEncodedFileName(FileName),ShareMode,Rights);
  27. end;
  28. Function FileExists (Const FileName : UnicodeString) : Boolean;
  29. begin
  30. Result:=FileExists(ToSingleByteFileSystemEncodedFileName(FileName));
  31. end;
  32. Function DirectoryExists (Const Directory : UnicodeString) : Boolean;
  33. begin
  34. Result:=DirectoryExists(ToSingleByteFileSystemEncodedFileName(Directory));
  35. end;
  36. Function FileGetAttr (Const FileName : UnicodeString) : Longint;
  37. begin
  38. Result:=FileGetAttr(ToSingleByteFileSystemEncodedFileName(FileName));
  39. end;
  40. Function FileSetAttr (Const Filename : UnicodeString; Attr: longint) : Longint;
  41. begin
  42. Result:=FileSetAttr(ToSingleByteFileSystemEncodedFileName(FileName),Attr);
  43. end;
  44. Function DeleteFile (Const FileName : UnicodeString) : Boolean;
  45. begin
  46. Result:=DeleteFile(ToSingleByteFileSystemEncodedFileName(FileName));
  47. end;
  48. Function RenameFile (Const OldName, NewName : UnicodeString) : Boolean;
  49. begin
  50. Result:=RenameFile(ToSingleByteFileSystemEncodedFileName(OldName),
  51. ToSingleByteFileSystemEncodedFileName(NewName));
  52. end;
  53. {$ifdef OS_FILEISREADONLY}
  54. Function FileIsReadOnly(const FileName: UnicodeString): Boolean;
  55. begin
  56. Result:=FileIsReadOnly(ToSingleByteFileSystemEncodedFileName(FileName));
  57. end;
  58. {$endif}
  59. {$ifdef OS_FILESETDATEBYNAME}
  60. Function FileSetDate (Const FileName : UnicodeString;Age : Longint) : Longint;
  61. begin
  62. Result:=FileSetDate(ToSingleByteFileSystemEncodedFileName(FileName),Age);
  63. end;
  64. {$endif}
  65. Function FileSearch (Const Name, DirList : UnicodeString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : UnicodeString;
  66. begin
  67. Result:=UnicodeString(FileSearch(ToSingleByteFileSystemEncodedFileName(Name),
  68. ToSingleByteFileSystemEncodedFileName(Dirlist),Options));
  69. end;
  70. Function FileSearch (Const Name, DirList : UnicodeString; ImplicitCurrentDir : Boolean) : UnicodeString;
  71. begin
  72. Result:=UnicodeString(FileSearch(ToSingleByteFileSystemEncodedFileName(Name),
  73. ToSingleByteFileSystemEncodedFileName(DirList),ImplicitCurrentDir));
  74. end;
  75. Function ExeSearch (Const Name : UnicodeString; Const DirList : UnicodeString ='' ) : UnicodeString;
  76. begin
  77. Result:=UnicodeString(ExeSearch(ToSingleByteFileSystemEncodedFileName(Name),
  78. ToSingleByteFileSystemEncodedFileName(Dirlist)));
  79. end;
  80. Function FileSearch (Const Name, DirList : RawByteString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : RawByteString;
  81. Var
  82. I : longint;
  83. Temp : RawByteString;
  84. begin
  85. Result:=Name;
  86. temp:=SetDirSeparators(DirList);
  87. // Start with checking the file in the current directory
  88. If (sfoImplicitCurrentDir in Options) and (Result <> '') and FileExists(Result) Then
  89. exit;
  90. while True do begin
  91. If Temp = '' then
  92. Break; // No more directories to search - fail
  93. I:=pos(PathSeparator,Temp);
  94. If I<>0 then
  95. begin
  96. Result:=Copy (Temp,1,i-1);
  97. system.Delete(Temp,1,I);
  98. end
  99. else
  100. begin
  101. Result:=Temp;
  102. Temp:='';
  103. end;
  104. If Result<>'' then
  105. begin
  106. If (sfoStripQuotes in Options) and (Result[1]='"') and (Result[Length(Result)]='"') then
  107. Result:=Copy(Result,2,Length(Result)-2);
  108. if (Result<>'') then
  109. Result:=IncludeTrailingPathDelimiter(Result)+name;
  110. end;
  111. If (Result <> '') and FileExists(Result) Then
  112. exit;
  113. end;
  114. Result:='';
  115. end;
  116. Function FileSearch (Const Name, DirList : RawByteString; ImplicitCurrentDir : Boolean) : RawByteString;
  117. begin
  118. if ImplicitCurrentDir then
  119. Result:=FileSearch(Name,DirList,[sfoImplicitCurrentDir])
  120. else
  121. Result:=FileSearch(Name,DirList,[]);
  122. end;
  123. Function ExeSearch (Const Name : RawByteString; Const DirList : RawByteString ='' ) : RawByteString;
  124. Var
  125. D : RawByteString;
  126. O : TFileSearchOptions;
  127. begin
  128. D:=DirList;
  129. if (D='') then
  130. D:=GetEnvironmentVariable('PATH');
  131. {$ifdef unix}
  132. O:=[];
  133. {$else unix}
  134. O:=[sfoImplicitCurrentDir,sfoStripQuotes];
  135. {$endif unix}
  136. Result := FileSearch(Name, D, O);
  137. end;
  138. {$endif}
  139. {$ifndef SYSUTILS_HAS_ANSISTR_FILEUTIL_IMPL}
  140. Function FileOpen (Const FileName : rawbytestring; Mode : Integer) : THandle;
  141. begin
  142. Result:=FileOpen(UnicodeString(FileName),Mode);
  143. end;
  144. Function FileCreate (Const FileName : RawByteString) : THandle;
  145. begin
  146. Result:=FileCreate(UnicodeString(FileName));
  147. end;
  148. Function FileCreate (Const FileName : RawByteString; Rights : Integer) : THandle;
  149. begin
  150. Result:=FileCreate(UnicodeString(FileName),Rights);
  151. end;
  152. Function FileCreate (Const FileName : RawByteString; ShareMode : Integer; Rights : Integer) : THandle;
  153. begin
  154. Result:=FileCreate(UnicodeString(FileName),ShareMode,Rights);
  155. end;
  156. Function FileExists (Const FileName : RawByteString) : Boolean;
  157. begin
  158. Result:=FileExists(UnicodeString(FileName));
  159. end;
  160. Function DirectoryExists (Const Directory : RawByteString) : Boolean;
  161. begin
  162. Result:=DirectoryExists(UnicodeString(Directory));
  163. end;
  164. Function FileGetAttr (Const FileName : RawByteString) : Longint;
  165. begin
  166. Result:=FileGetAttr(unicodestring(FileName));
  167. end;
  168. Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint;
  169. begin
  170. Result:=FileSetAttr(unicodestring(FileName),Attr);
  171. end;
  172. Function DeleteFile (Const FileName : RawByteString) : Boolean;
  173. begin
  174. Result:=DeleteFile(UnicodeString(FileName));
  175. end;
  176. Function RenameFile (Const OldName, NewName : RawByteString) : Boolean;
  177. begin
  178. Result:=RenameFile(UnicodeString(OldName),UnicodeString(NewName));
  179. end;
  180. {$ifdef OS_FILEISREADONLY}
  181. Function FileIsReadOnly(const FileName: RawByteString): Boolean;
  182. begin
  183. Result:=FileIsReadOnly(UnicodeString(FileName));
  184. end;
  185. {$endif}
  186. {$ifdef OS_FILESETDATEBYNAME}
  187. Function FileSetDate (Const FileName : RawByteString;Age : Longint) : Longint;
  188. begin
  189. Result:=FileSetDate(UnicodeString(FileName),Age);
  190. end;
  191. {$endif}
  192. Function FileSearch (Const Name, DirList : UnicodeString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : UnicodeString;
  193. Var
  194. I : longint;
  195. Temp : UnicodeString;
  196. begin
  197. Result:=Name;
  198. temp:=SetDirSeparators(DirList);
  199. // Start with checking the file in the current directory
  200. If (sfoImplicitCurrentDir in Options) and (Result <> '') and FileExists(Result) Then
  201. exit;
  202. while True do begin
  203. If Temp = '' then
  204. Break; // No more directories to search - fail
  205. I:=pos(PathSeparator,Temp);
  206. If I<>0 then
  207. begin
  208. Result:=Copy (Temp,1,i-1);
  209. system.Delete(Temp,1,I);
  210. end
  211. else
  212. begin
  213. Result:=Temp;
  214. Temp:='';
  215. end;
  216. If Result<>'' then
  217. begin
  218. If (sfoStripQuotes in Options) and (Result[1]='"') and (Result[Length(Result)]='"') then
  219. Result:=Copy(Result,2,Length(Result)-2);
  220. if (Result<>'') then
  221. Result:=IncludeTrailingPathDelimiter(Result)+name;
  222. end;
  223. If (Result <> '') and FileExists(Result) Then
  224. exit;
  225. end;
  226. Result:='';
  227. end;
  228. Function FileSearch (Const Name, DirList : RawbyteString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : RawByteString;
  229. begin
  230. Result:=ToSingleByteFileSystemEncodedFileName(FileSearch(unicodestring(name),unicodestring(dirlist),options));
  231. end;
  232. Function FileSearch (Const Name, DirList : RawbyteString; ImplicitCurrentDir : Boolean) : RawByteString;
  233. begin
  234. Result:=ToSingleByteFileSystemEncodedFileName(FileSearch(unicodestring(name),unicodestring(dirlist),ImplicitCurrentDir));
  235. end;
  236. Function FileSearch (Const Name, DirList : UnicodeString; ImplicitCurrentDir : Boolean) : UnicodeString;
  237. begin
  238. if ImplicitCurrentDir then
  239. Result:=FileSearch(Name,DirList,[sfoImplicitCurrentDir])
  240. else
  241. Result:=FileSearch(Name,DirList,[]);
  242. end;
  243. Function ExeSearch (Const Name : UnicodeString; Const DirList : UnicodeString ='' ) : UnicodeString;
  244. Var
  245. D : UnicodeString;
  246. O : TFileSearchOptions;
  247. begin
  248. D:=DirList;
  249. if (D='') then
  250. D:=GetEnvironmentVariable('PATH');
  251. {$ifdef unix}
  252. O:=[];
  253. {$else unix}
  254. O:=[sfoImplicitCurrentDir,sfoStripQuotes];
  255. {$endif unix}
  256. Result := FileSearch(Name, D, O);
  257. end;
  258. Function ExeSearch (Const Name : RawbyteString; Const DirList : RawbyteString ='' ) : RawByteString;
  259. begin
  260. Result:=ToSingleByteFileSystemEncodedFileName(ExeSearch(unicodestring(name),unicodestring(dirlist)));
  261. end;
  262. {$endif}
  263. Function GetFileHandle(var f : File):THandle;
  264. begin
  265. Result:=filerec(f).handle;
  266. end;
  267. Function GetFileHandle(var f : Text):THandle;
  268. begin
  269. Result:=textrec(f).handle;
  270. end;