Chameleon

Chameleon Svn Source Tree

Root/branches/xZenu/src/util/doxygen/qtools/qfileinfo_win32.cpp

Source at commit 1322 created 12 years 8 months ago.
By meklort, Add doxygen to utils folder
1/******************************************************************************
2 *
3 *
4 *
5 * Copyright (C) 1997-2001 by Dimitri van Heesch.
6 *
7 * Permission to use, copy, modify, and distribute this software and its
8 * documentation under the terms of the GNU General Public License is hereby
9 * granted. No representations are made about the suitability of this software
10 * for any purpose. It is provided "as is" without express or implied warranty.
11 * See the GNU General Public License for more details.
12 *
13 * Documents produced by Doxygen are derivative works derived from the
14 * input used in their production; they are not affected by this license.
15 *
16 * Based on qfileinfo_unix.cpp
17 *
18 * Copyright (C) 1992-2000 Trolltech AS.
19 */
20
21#include "qglobal.h"
22
23#include "qfileinfo.h"
24#include "qfiledefs_p.h"
25#include "qdatetime.h"
26#include "qdir.h"
27
28static void reslashify( QString& n )
29{
30 for ( int i=0; i<(int)n.length(); i++ )
31 {
32 if ( n[i] == '/' )
33 n[i] = '\\';
34 }
35}
36
37void QFileInfo::slashify( QString& n )
38{
39 for ( int i=0; i<(int)n.length(); i++ )
40 {
41 if ( n[i] == '\\' )
42 n[i] = '/';
43 }
44}
45
46void QFileInfo::makeAbs( QString & )
47{
48 // TODO: what to do here?
49 return;
50}
51
52extern bool qt_file_access( const QString& fn, int t );
53
54/*!
55 Returns TRUE if we are pointing to a real file.
56 \sa isDir(), isSymLink()
57*/
58bool QFileInfo::isFile() const
59{
60 if ( !fic || !cache )
61doStat();
62 return fic ? (fic->st.st_mode & STAT_MASK) == STAT_REG : FALSE;
63}
64
65/*!
66 Returns TRUE if we are pointing to a directory or a symbolic link to
67 a directory.
68 \sa isFile(), isSymLink()
69*/
70
71bool QFileInfo::isDir() const
72{
73 if ( !fic || !cache )
74doStat();
75 return fic ? (fic->st.st_mode & STAT_MASK) == STAT_DIR : FALSE;
76}
77
78/*!
79 Returns TRUE if we are pointing to a symbolic link.
80 \sa isFile(), isDir(), readLink()
81*/
82
83bool QFileInfo::isSymLink() const
84{
85 if ( !fic || !cache )
86doStat();
87 return fic ? fic->isSymLink : FALSE;
88}
89
90
91/*!
92 Returns the name a symlink points to, or a null QString if the
93 object does not refer to a symbolic link.
94
95 This name may not represent an existing file; it is only a string.
96 QFileInfo::exists() returns TRUE if the symlink points to an
97 existing file.
98
99 \sa exists(), isSymLink(), isDir(), isFile()
100*/
101
102QString QFileInfo::readLink() const
103{
104 QString r;
105 return r;
106}
107
108static const uint nobodyID = (uint) -2;
109
110/*!
111 Returns the owner of the file.
112
113 On systems where files do not have owners this function returns
114 a null string.
115
116 Note that this function can be time-consuming under UNIX. (in the order
117 of milliseconds on a 486 DX2/66 running Linux).
118
119 \sa ownerId(), group(), groupId()
120*/
121
122QString QFileInfo::owner() const
123{
124 return QString::null;
125}
126
127/*!
128 Returns the id of the owner of the file.
129
130 On systems where files do not have owners this function returns ((uint) -2).
131
132 \sa owner(), group(), groupId()
133*/
134
135uint QFileInfo::ownerId() const
136{
137 return (uint)-2;
138}
139
140/*!
141 Returns the group the file belongs to.
142
143 On systems where files do not have groups this function always
144 returns 0.
145
146 Note that this function can be time-consuming under UNIX (in the order of
147 milliseconds on a 486 DX2/66 running Linux).
148
149 \sa groupId(), owner(), ownerId()
150*/
151
152QString QFileInfo::group() const
153{
154 return QString::null;
155}
156
157/*!
158 Returns the id of the group the file belongs to.
159
160 On systems where files do not have groups this function always
161 returns ((uind) -2).
162
163 \sa group(), owner(), ownerId()
164*/
165
166uint QFileInfo::groupId() const
167{
168 return (uint)-2;
169}
170
171
172/*!
173 \fn bool QFileInfo::permission( int permissionSpec ) const
174
175 Tests for file permissions. The \e permissionSpec argument can be several
176 flags of type PermissionSpec or'ed together to check for permission
177 combinations.
178
179 On systems where files do not have permissions this function always
180 returns TRUE.
181
182 Example:
183 \code
184 QFileInfo fi( "/tmp/tonsils" );
185 if ( fi.permission( QFileInfo::WriteUser | QFileInfo::ReadGroup ) )
186qWarning( "Tonsils can be changed by me, and the group can read them.");
187 if ( fi.permission( QFileInfo::WriteGroup | QFileInfo::WriteOther ) )
188qWarning( "Danger! Tonsils can be changed by the group or others!" );
189 \endcode
190
191 \sa isReadable(), isWritable(), isExecutable()
192*/
193
194bool QFileInfo::permission( int permissionSpec ) const
195{
196 return TRUE;
197}
198
199/*!
200 Returns the file size in bytes, or 0 if the file does not exist if the size
201 cannot be fetched.
202*/
203
204uint QFileInfo::size() const
205{
206 if ( !fic || !cache )
207doStat();
208 if ( fic )
209return (uint)fic->st.st_size;
210 else
211return 0;
212}
213
214
215/*!
216 Returns the date and time when the file was last modified.
217 \sa lastRead()
218*/
219
220QDateTime QFileInfo::lastModified() const
221{
222 QDateTime dt;
223 if ( !fic || !cache )
224doStat();
225 if ( fic )
226dt.setTime_t( fic->st.st_mtime );
227 return dt;
228}
229
230/*!
231 Returns the date and time when the file was last read (accessed).
232
233 On systems that do not support last read times, the modification time is
234 returned.
235
236 \sa lastModified()
237*/
238
239QDateTime QFileInfo::lastRead() const
240{
241 QDateTime dt;
242 if ( !fic || !cache )
243doStat();
244 if ( fic )
245dt.setTime_t( fic->st.st_atime );
246 return dt;
247}
248
249
250void QFileInfo::doStat() const
251{
252 QFileInfo *that = ((QFileInfo*)this);// mutable function
253 if ( !that->fic )
254that->fic = new QFileInfoCache;
255 STATBUF *b = &that->fic->st;
256 that->fic->isSymLink = FALSE;
257
258#if defined(__CYGWIN32_)
259 int r;
260
261 r = STAT( QFile::encodeName(fn), b );
262
263 if ( r != 0 ) {
264delete that->fic;
265that->fic = 0;
266 }
267#else
268 QString file = fn;
269 reslashify(file);
270#ifdef QT_LARGEFILE_SUPPORT
271 if ( _wstati64( (wchar_t*) file.ucs2(), b ) == -1 ) {
272#else
273 if ( _wstat( (wchar_t*) file.ucs2(), b ) == -1 ) {
274#endif
275 delete that->fic;
276 that->fic = 0;
277 }
278#endif
279}
280
281/*!
282 Returns the directory path of the file.
283
284 If \e absPath is TRUE an absolute path is always returned.
285
286 \sa dir(), filePath(), fileName(), isRelative()
287*/
288#ifndef QT_NO_DIR
289QString QFileInfo::dirPath( bool absPath ) const
290{
291 QString s;
292 if ( absPath )
293s = absFilePath();
294 else
295s = fn;
296 int pos = s.findRev( '/' );
297 if ( pos == -1 ) {
298return QString::fromLatin1(".");
299 } else {
300if ( pos == 0 )
301 return QString::fromLatin1( "/" );
302return s.left( pos );
303 }
304}
305#endif
306/*!
307 Returns the name of the file, the file path is not included.
308
309 Example:
310 \code
311 QFileInfo fi( "/tmp/abdomen.lower" );
312 QString name = fi.fileName();// name = "abdomen.lower"
313 \endcode
314
315 \sa isRelative(), filePath(), baseName(), extension()
316*/
317
318QString QFileInfo::fileName() const
319{
320 int p = fn.findRev( '/' );
321 if ( p == -1 ) {
322return fn;
323 } else {
324return fn.mid(p+1);
325 }
326}
327
328/*!
329 Returns the absolute path name.
330
331 The absolute path name is the file name including the absolute path. If
332 the QFileInfo is absolute (i.e. not relative) this function will return
333 the same string as filePath().
334
335 Note that this function can be time-consuming under UNIX. (in the order
336 of milliseconds on a 486 DX2/66 running Linux).
337
338 \sa isRelative(), filePath()
339*/
340#ifndef QT_NO_DIR
341QString QFileInfo::absFilePath() const
342{
343 if ( QDir::isRelativePath(fn) ) {
344QString tmp = QDir::currentDirPath();
345tmp += '/';
346tmp += fn;
347makeAbs( tmp );
348return QDir::cleanDirPath( tmp );
349 } else {
350QString tmp = fn;
351makeAbs( tmp );
352return QDir::cleanDirPath( tmp );
353 }
354
355}
356#endif
357

Archive Download this file

Revision: 1322