1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleFindFiles</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<h1 class="unit">Unit CastleFindFiles</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Uses">Uses</a></td><td><a class="section" href="#PasDoc-Classes">Classes, Interfaces, Objects and Records</a></td><td><a class="section" href="#PasDoc-FuncsProcs">Functions and Procedures</a></td><td><a class="section" href="#PasDoc-Types">Types</a></td><td>Constants</td><td>Variables</td></tr></table>
<a name="PasDoc-Description"></a><h2 class="description">Description</h2>
<p>
Finding files matching some mask.</p>
<a name="PasDoc-Uses"></a><h2 class="uses">Uses</h2>
<ul class="useslist"><li>SysUtils</li><li><a href="CastleUtils.html">CastleUtils</a></li><li>Classes</li><li><a href="CastleGenericLists.html">CastleGenericLists</a></li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Classes"></a><h3 class="cio">Classes, Interfaces, Objects and Records</h3>
<table class="classestable wide_list">
<tr class="listheader">
<th class="itemname">Name</th>
<th class="itemdesc">Description</th>
</tr>
<tr class="list">
<td class="itemname">record <a class="bold" href="CastleFindFiles.TFileInfo.html"><code>TFileInfo</code></a></td>
<td class="itemdesc"> </td>
</tr>
</table>
<a name="PasDoc-FuncsProcs"></a><h3 class="summary">Functions and Procedures</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleFindFiles.html#FindFiles">FindFiles</a></b>(const Path, Mask: string; const FindDirectories: boolean; FileMethod: <a href="CastleFindFiles.html#TFoundFileMethod">TFoundFileMethod</a>; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleFindFiles.html#FindFiles">FindFiles</a></b>(const Path, Mask: string; const FindDirectories: boolean; FileProc: <a href="CastleFindFiles.html#TFoundFileProc">TFoundFileProc</a>; FileProcData: Pointer; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleFindFiles.html#FindFiles">FindFiles</a></b>(const PathAndMask: string; const FindDirectories: boolean; FileMethod: <a href="CastleFindFiles.html#TFoundFileMethod">TFoundFileMethod</a>; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleFindFiles.html#FindFiles">FindFiles</a></b>(const PathAndMask: string; const FindDirectories: boolean; FileProc: <a href="CastleFindFiles.html#TFoundFileProc">TFoundFileProc</a>; FileProcData: Pointer; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleFindFiles.html#SearchFileHard">SearchFileHard</a></b>(Path: string; const Base: string; out NewBase: string): boolean;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleFindFiles.html#FindFirstFile">FindFirstFile</a></b>(const Mask: string; out FileInfo: <a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>): boolean;</code></td>
</tr>
</table>
<a name="PasDoc-Types"></a><h3 class="summary">Types</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a href="CastleFindFiles.html#TFileInfoList">TFileInfoList</a></b> = specialize <a href="CastleGenericLists.TGenericStructList.html">TGenericStructList</a><<a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>>;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a href="CastleFindFiles.html#TFoundFileProc">TFoundFileProc</a></b> = procedure (const FileInfo: <a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>; Data: Pointer);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code><b><a href="CastleFindFiles.html#TFoundFileMethod">TFoundFileMethod</a></b> = procedure (const FileInfo: <a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>) of object;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a href="CastleFindFiles.html#TFindFilesOption">TFindFilesOption</a></b> = (...);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code><b><a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a></b> = set of <a href="CastleFindFiles.html#TFindFilesOption">TFindFilesOption</a>;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Functions and Procedures</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FindFiles"></a><code>function <b>FindFiles</b>(const Path, Mask: string; const FindDirectories: boolean; FileMethod: <a href="CastleFindFiles.html#TFoundFileMethod">TFoundFileMethod</a>; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr><td colspan="1">
<p>
Find all files matching the given mask, and call FileProc for them.
<p>
<p>
<p>
<p>
<p>
<p>
<p>
<p></p>
<h6 class="description_section">Parameters</h6>
<dl class="parameters">
<dt>Path</dt>
<dd>Path URL to search inside. May be absolute or relative. Like everywhere in our engine, it can also be a local filesystem path, although we advice using URLs for everything. May, but doesn't have to, end with slash or PathDelim.</dd>
<dt>Mask</dt>
<dd>Mask of the files to search, may contain wildcards * and ?.</dd>
<dt>PathAndMask</dt>
<dd>Overloaded versions without separate Path and Mask parameters just assume that PathAndMask contain concatenated Path + Mask, separated by any valid path delimiter.</dd>
<dt>FindDirectories</dt>
<dd>Should directories also be found (reported by FileProc). Note that this is completely independent from whether we work recursively (ffRecursive in Options).</dd>
<dt>FileProc</dt>
<dd>Called on each file found. May be <code>Nil</code> (useful if you are only interested in the number of files found, returned by this function).</dd>
<dt>Options</dt>
<dd>A set of options. See <a class="normal" href="CastleFindFiles.html#TFindFilesOption">TFindFilesOption</a> for meaning of each option.</dd>
</dl>
<h6 class="description_section">Returns</h6>
<p class="return">How many times FileProc was called, that is: how many files/directories were matching. Useful to report to user how many files were processed, in particular to warn if nothing was processed.</p></td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FindFiles"></a><code>function <b>FindFiles</b>(const Path, Mask: string; const FindDirectories: boolean; FileProc: <a href="CastleFindFiles.html#TFoundFileProc">TFoundFileProc</a>; FileProcData: Pointer; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FindFiles"></a><code>function <b>FindFiles</b>(const PathAndMask: string; const FindDirectories: boolean; FileMethod: <a href="CastleFindFiles.html#TFoundFileMethod">TFoundFileMethod</a>; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FindFiles"></a><code>function <b>FindFiles</b>(const PathAndMask: string; const FindDirectories: boolean; FileProc: <a href="CastleFindFiles.html#TFoundFileProc">TFoundFileProc</a>; FileProcData: Pointer; Options: <a href="CastleFindFiles.html#TFindFilesOptions">TFindFilesOptions</a>): Cardinal; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="SearchFileHard"></a><code>function <b>SearchFileHard</b>(Path: string; const Base: string; out NewBase: string): boolean;</code></td>
</tr>
<tr><td colspan="1">
<p>
Search for a file, ignoring the case. Path must be absolute URL and contain the final slash. Returns URL relative to Path.
<p>We prefer to return just Base, if it exists, or when no alternative exists. When Base doesn't exist but some likely alternative exists (e.g. with different case), we return it.
<p>Looks for normal files/symlinks, that can be opened as usual files. Not directories.
<p>Returns if some file was found. Note that even when we return <code>False</code>, we still set NewBase (to original Base).</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FindFirstFile"></a><code>function <b>FindFirstFile</b>(const Mask: string; out FileInfo: <a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>): boolean;</code></td>
</tr>
<tr><td colspan="1">
<p>
Find first file matching given Mask. The file can be anything (including a symlink or directory). It is not searched recursively, it is only searched for in the directory inside Mask.
<p>If found, returns <code>True</code> and sets FileInfo. Otherwise, returns <code>False</code> and leaves FileInfo undefined.</p>
</td></tr>
</table>
<h3 class="detail">Types</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TFileInfoList"></a><code><b>TFileInfoList</b> = specialize <a href="CastleGenericLists.TGenericStructList.html">TGenericStructList</a><<a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>>;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TFoundFileProc"></a><code><b>TFoundFileProc</b> = procedure (const FileInfo: <a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>; Data: Pointer);</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TFoundFileMethod"></a><code><b>TFoundFileMethod</b> = procedure (const FileInfo: <a href="CastleFindFiles.TFileInfo.html">TFileInfo</a>) of object;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TFindFilesOption"></a><code><b>TFindFilesOption</b> = (...);</code></td>
</tr>
<tr><td colspan="1">
<h6 class="description_section">Values</h6>
<ul>
<li>
ffRecursive: If ffRecursive is in Options then <a class="normal" href="CastleFindFiles.html#FindFiles">FindFiles</a> (and friends) descend into subdirectories.
<p>Note that we always descend into <i>every</i> subdirectory (not only into those matching Mask, that would be pretty useless (and is a problem with Unix shell expansion)).
<p>Note that including ffRecursive in Options is something completely different than the FindDirectories parameter: FindDirectories says whether to report directories to FileProc; ffRecursive says whether to descend into directories and enumerate their files too.
<p>Recursive does <i>not</i> descend into symlinks to directories on Unix right now. The reason is that this would risk an infinite loop (unless some time-consuming precautions would be taken, or a level limit). In other words, it's just not implemented. But it <i>may</i> be implemented someday, as this would be definitely something useful.
<p>For Android asset searching: note that recursive searching if unfortunately not supported. Although Android NDK contains functions to iterate over a files inside a directory, it stupidly omits the subdirectories (only returns the non-directory files).</li>
<li>
ffDirContentsLast: Determines the order of reporting directory contents. Meaningfull only if ffRecursive is also included in Options.
<p>If not included, then directory contents (files and directories matching mask) are reported to the callback first. And only then we enter the subdirectories.
<p>If ffDirContentsLast is included, then we first enter subdirectories. Only then we list directory contents to the callback.</li>
<li>
ffReadAllFirst: If ffReadAllFirst is included in the Options then before calling FileProc, we will first read <i>all</i> file information to an internal array. And only then we will call FileProc for each item of this array.
<p>Why this may be useful? This way changes to the directory (like renaming / deleting / creating files) will not have any effect on the list of files we will get. This is important if our FileProc may modify the directory contents. Without ffReadAllFirst, it's undefined (OS-dependent and sometimes just random) if the new file names will appear in the directory list.</li>
</ul>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TFindFilesOptions"></a><code><b>TFindFilesOptions</b> = set of <a href="CastleFindFiles.html#TFindFilesOption">TFindFilesOption</a>;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(["trackPageView"]);
_paq.push(["enableLinkTracking"]);
(function() {
var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
_paq.push(["setTrackerUrl", u+"piwik.php"]);
_paq.push(["setSiteId", "1"]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Piwik Code -->
<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:09</em>
</span>
</td></tr></table></body></html>
|