ObjFW
OFFileManager.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008-2026 Jonathan Schleifer <js@nil.im>
3  *
4  * All rights reserved.
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License version 3.0 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13  * version 3.0 for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * version 3.0 along with this program. If not, see
17  * <https://www.gnu.org/licenses/>.
18  */
19 
20 #import "OFObject.h"
21 #import "OFDictionary.h"
22 
23 OF_ASSUME_NONNULL_BEGIN
24 
27 #ifdef OF_HAVE_FILES
28 # if (defined(OF_HAVE_CHMOD) && !defined(OF_NINTENDO_DS)) || defined(DOXYGEN)
29 # define OF_FILE_MANAGER_SUPPORTS_PERMISSIONS
30 # endif
31 # if defined(OF_HAVE_CHOWN) || defined(DOXYGEN)
32 # define OF_FILE_MANAGER_SUPPORTS_OWNER
33 # endif
34 # if (defined(OF_HAVE_LINK) && !defined(OF_AMIGAOS) && \
35  !defined(OF_NINTENDO_DS)) || defined(OF_WINDOWS) || defined(DOXYGEN)
36 # define OF_FILE_MANAGER_SUPPORTS_LINKS
37 # endif
38 # if (defined(OF_HAVE_SYMLINK) && !defined(OF_AMIGAOS) && \
39  !defined(OF_NINTENDO_DS)) || defined(OF_WINDOWS) || defined(DOXYGEN)
40 # define OF_FILE_MANAGER_SUPPORTS_SYMLINKS
41 # endif
42 # if defined(OF_LINUX) || defined(OF_MACOS) || defined(OF_FREEBSD) || \
43  defined(OF_NETBSD) || defined(OF_HAIKU) || defined(OF_SOLARIS) || \
44  defined(DOXYGEN)
45 # define OF_FILE_MANAGER_SUPPORTS_EXTENDED_ATTRIBUTES
46 # endif
47 #endif
48 
49 @class OFArray OF_GENERIC(ObjectType);
50 @class OFConstantString;
51 @class OFDate;
52 @class OFIRI;
53 @class OFNumber;
54 @class OFString;
55 
59 typedef enum {
71  OFFileAmigaPure = 0x0020,
75  OFFileAmigaHold = 0x0080,
93 
97 typedef enum {
111 
137 
155 
161 
166 typedef OFMutableDictionary OF_GENERIC(OFFileAttributeKey, id)
168 
169 #ifdef __cplusplus
170 extern "C" {
171 #endif
172 
178 extern const OFFileAttributeKey OFFileSize;
179 
188 extern const OFFileAttributeKey OFFileType;
189 
197 
205 
213 
221 
229 
237 
245 
253 
261 
269 
278 
285 
290 
297 
302 
307 
312 
317 
322 
327 
332 
341 #ifdef __cplusplus
342 }
343 #endif
344 
351 #ifndef OF_FILE_MANAGER_M
352 OF_SUBCLASSING_RESTRICTED
353 #endif
355 #ifdef OF_HAVE_CLASS_PROPERTIES
356 @property (class, readonly, nonatomic) OFFileManager *defaultManager;
357 #endif
358 
359 #ifdef OF_HAVE_FILES
360 
365 @property (readonly, nonatomic) OFString *currentDirectoryPath;
366 
372 @property (readonly, nonatomic) OFIRI *currentDirectoryIRI;
373 #endif
374 
379 
380 #ifdef OF_HAVE_FILES
381 
390 - (OFFileAttributes)attributesOfItemAtPath: (OFString *)path;
391 #endif
392 
404 - (OFFileAttributes)attributesOfItemAtIRI: (OFIRI *)IRI;
405 
406 #ifdef OF_HAVE_FILES
407 
420 - (void)setAttributes: (OFFileAttributes)attributes
421  ofItemAtPath: (OFString *)path;
422 #endif
423 
439 - (void)setAttributes: (OFFileAttributes)attributes ofItemAtIRI: (OFIRI *)IRI;
440 
441 #ifdef OF_HAVE_FILES
442 
448 - (bool)fileExistsAtPath: (OFString *)path;
449 #endif
450 
459 - (bool)fileExistsAtIRI: (OFIRI *)IRI;
460 
461 #ifdef OF_HAVE_FILES
462 
468 - (bool)directoryExistsAtPath: (OFString *)path;
469 #endif
470 
479 - (bool)directoryExistsAtIRI: (OFIRI *)IRI;
480 
481 #ifdef OF_HAVE_FILES
482 
488 - (void)createDirectoryAtPath: (OFString *)path;
489 
498 - (void)createDirectoryAtPath: (OFString *)path
499  createParents: (bool)createParents;
500 #endif
501 
510 - (void)createDirectoryAtIRI: (OFIRI *)IRI;
511 
522 - (void)createDirectoryAtIRI: (OFIRI *)IRI createParents: (bool)createParents;
523 
524 #ifdef OF_HAVE_FILES
525 
535 - (OFArray OF_GENERIC(OFString *) *)contentsOfDirectoryAtPath: (OFString *)path;
536 #endif
537 
551 - (OFArray OF_GENERIC(OFIRI *) *)contentsOfDirectoryAtIRI: (OFIRI *)IRI;
552 
553 #ifdef OF_HAVE_FILES
554 
563 - (OFArray OF_GENERIC(OFString *) *)subpathsOfDirectoryAtPath: (OFString *)path;
564 
572 - (void)changeCurrentDirectoryPath: (OFString *)path;
573 
581 - (void)changeCurrentDirectoryIRI: (OFIRI *)IRI;
582 
599 - (void)copyItemAtPath: (OFString *)source toPath: (OFString *)destination;
600 #endif
601 
620 - (void)copyItemAtIRI: (OFIRI *)source toIRI: (OFIRI *)destination;
621 
622 #ifdef OF_HAVE_FILES
623 
644 - (void)moveItemAtPath: (OFString *)source toPath: (OFString *)destination;
645 #endif
646 
670 - (void)moveItemAtIRI: (OFIRI *)source toIRI: (OFIRI *)destination;
671 
672 #ifdef OF_HAVE_FILES
673 
681 - (void)removeItemAtPath: (OFString *)path;
682 #endif
683 
694 - (void)removeItemAtIRI: (OFIRI *)IRI;
695 
696 #ifdef OF_FILE_MANAGER_SUPPORTS_LINKS
697 
711 - (void)linkItemAtPath: (OFString *)source toPath: (OFString *)destination;
712 #endif
713 
730 - (void)linkItemAtIRI: (OFIRI *)source toIRI: (OFIRI *)destination;
731 
732 #ifdef OF_FILE_MANAGER_SUPPORTS_SYMLINKS
733 
750 - (void)createSymbolicLinkAtPath: (OFString *)path
751  withDestinationPath: (OFString *)target;
752 #endif
753 
771 - (void)createSymbolicLinkAtIRI: (OFIRI *)IRI
772  withDestinationPath: (OFString *)target;
773 
774 #ifdef OF_FILE_MANAGER_SUPPORTS_EXTENDED_ATTRIBUTES
775 
790 - (OFData *)extendedAttributeDataForName: (OFString *)name
791  ofItemAtPath: (OFString *)path;
792 
812 - (void)getExtendedAttributeData: (OFData *_Nonnull *_Nonnull)data
813  andType: (id _Nullable *_Nullable)type
814  forName: (OFString *)name
815  ofItemAtPath: (OFString *)path;
816 #endif
817 
835 - (OFData *)extendedAttributeDataForName: (OFString *)name
836  ofItemAtIRI: (OFIRI *)IRI;
837 
859 - (void)getExtendedAttributeData: (OFData *_Nonnull *_Nonnull)data
860  andType: (id _Nullable *_Nullable)type
861  forName: (OFString *)name
862  ofItemAtIRI: (OFIRI *)IRI;
863 
864 #ifdef OF_FILE_MANAGER_SUPPORTS_EXTENDED_ATTRIBUTES
865 
879 - (void)setExtendedAttributeData: (OFData *)data
880  forName: (OFString *)name
881  ofItemAtPath: (OFString *)path;
882 
902 - (void)setExtendedAttributeData: (OFData *)data
903  andType: (nullable id)type
904  forName: (OFString *)name
905  ofItemAtPath: (OFString *)path;
906 #endif
907 
924 - (void)setExtendedAttributeData: (OFData *)data
925  forName: (OFString *)name
926  ofItemAtIRI: (OFIRI *)IRI;
927 
949 - (void)setExtendedAttributeData: (OFData *)data
950  andType: (nullable id)type
951  forName: (OFString *)name
952  ofItemAtIRI: (OFIRI *)IRI;
953 
954 #ifdef OF_FILE_MANAGER_SUPPORTS_EXTENDED_ATTRIBUTES
955 
968 - (void)removeExtendedAttributeForName: (OFString *)name
969  ofItemAtPath: (OFString *)path;
970 #endif
971 
987 - (void)removeExtendedAttributeForName: (OFString *)name
988  ofItemAtIRI: (OFIRI *)IRI;
989 @end
990 
991 @interface OFDictionary (FileAttributes)
997 @property (readonly, nonatomic) unsigned long long fileSize;
998 
1004 @property (readonly, nonatomic) OFFileAttributeType fileType;
1005 
1011 @property (readonly, nonatomic) unsigned long filePOSIXPermissions;
1012 
1018 @property (readonly, nonatomic) unsigned long fileOwnerAccountID;
1019 
1025 @property (readonly, nonatomic) unsigned long fileGroupOwnerAccountID;
1026 
1032 @property (readonly, nonatomic) OFString *fileOwnerAccountName;
1033 
1039 @property (readonly, nonatomic) OFString *fileGroupOwnerAccountName;
1040 
1046 @property (readonly, nonatomic) OFDate *fileLastAccessDate;
1047 
1053 @property (readonly, nonatomic) OFDate *fileModificationDate;
1054 
1060 @property (readonly, nonatomic) OFDate *fileStatusChangeDate;
1061 
1067 @property (readonly, nonatomic) OFDate *fileCreationDate;
1068 
1074 @property (readonly, nonatomic) OFString *fileSymbolicLinkDestination;
1075 
1081 @property (readonly, nonatomic)
1082  OFArray OF_GENERIC(OFString *) *fileExtendedAttributesNames;
1083 
1089 @property (readonly, nonatomic) OFFileAmigaProtectionMask fileAmigaProtection;
1090 
1096 @property (readonly, nonatomic) OFString *fileAmigaComment;
1097 
1103 @property (readonly, nonatomic) OFFileMSDOSAttributesMask fileMSDOSAttributes;
1104 @end
1105 
1106 OF_ASSUME_NONNULL_END
The file can be read by group.
Definition: OFFileManager.h:83
An abstract class for storing objects in an array.
Definition: OFArray.h:108
const OFFileAttributeKey OFFileModificationDate
The last modification date of the file as an OFDate.
const OFFileAttributeType OFFileTypeSocket
A socket.
OFConstantString * OFFileAttributeKey
A key for a file attribute in the file attributes dictionary.
Definition: OFFileManager.h:136
The file cannot be executed.
Definition: OFFileManager.h:63
const OFFileAttributeKey OFFileLastAccessDate
The last access date of the file as an OFDate.
The file can be deleted by the group.
Definition: OFFileManager.h:77
const OFFileAttributeType OFFileTypeSymbolicLink
A symbolic link.
const OFFileAttributeType OFFileTypeFIFO
A FIFO.
A class for storing, accessing and comparing dates.
Definition: OFDate.h:33
A class for storing constant strings using the @"" literal.
Definition: OFConstantString.h:41
A class which provides management for files, e.g. reading contents of directories, deleting files, renaming files, etc.
Definition: OFFileManager.h:354
The root class for all other classes inside ObjFW.
Definition: OFObject.h:954
OFIRI * currentDirectoryIRI
The IRI of the current working directory.
Definition: OFFileManager.h:372
const OFFileAttributeKey OFFileExtendedAttributesNames
The names of the extended attributes as an OFArray of OFString.
The file is a script.
Definition: OFFileManager.h:73
const OFFileAttributeKey OFFileOwnerAccountID
The account ID of the owner of the file as an OFNumber.
const OFFileAttributeKey OFFileSymbolicLinkDestination
The destination of a symbolic link as an OFString.
const OFFileAttributeKey OFFileSize
The size of the file as an OFNumber.
OFFileMSDOSAttributesMask
MS-DOS attributes. This is a bit mask and the values are ORed.
Definition: OFFileManager.h:97
The file can be written to by others.
Definition: OFFileManager.h:89
OFDictionary * OFFileAttributes
A dictionary mapping keys of type OFFileAttributeKey to their attribute values.
Definition: OFFileManager.h:160
const OFFileAttributeKey OFFileGroupOwnerAccountID
The account ID of the group owner of the file as an OFNumber.
The file can be written to by the group.
Definition: OFFileManager.h:81
A class for handling strings.
Definition: OFString.h:142
The file cannot be deleted.
Definition: OFFileManager.h:61
const OFFileAttributeKey OFFileStatusChangeDate
The last status change date of the file as an OFDate.
const OFFileAttributeKey OFFileType
The type of the file.
An abstract class for storing objects in a dictionary.
Definition: OFDictionary.h:82
const OFFileAttributeKey OFFileOwnerAccountName
The account name of the owner of the file as an OFString.
The file is a reentrant program and can be made resident.
Definition: OFFileManager.h:71
OFFileManager * defaultManager()
Returns the default file manager.
Definition: OFFileManager.m:136
The file cannot be written to.
Definition: OFFileManager.h:65
The file is read-only.
Definition: OFFileManager.h:99
An abstract class for storing and changing objects in a dictionary.
Definition: OFMutableDictionary.h:46
Provides a way to store a number in an object.
Definition: OFNumber.h:46
const OFFileAttributeKey OFFileAmigaComment
The Amiga comment as an OFString.
The file can be deleted by others.
Definition: OFFileManager.h:85
const OFFileAttributeType OFFileTypeDirectory
A directory.
const OFFileAttributeType OFFileTypeBlockSpecial
A block special file.
The file is a directory.
Definition: OFFileManager.h:107
const OFFileAttributeKey OFFileAmigaProtection
The Amiga file protection as an OFNumber.
OFFileAmigaProtectionMask
Amiga file protection. This is a bit mask and the values are ORed.
Definition: OFFileManager.h:59
A class for representing IRIs, URIs, URLs and URNs, for parsing them as well as accessing parts of th...
Definition: OFIRI.h:39
The file has not been changed since it was archived.
Definition: OFFileManager.h:69
const OFFileAttributeType OFFileTypeCharacterSpecial
A character special file.
const OFFileAttributeKey OFFilePOSIXPermissions
The POSIX permissions of the file as an OFNumber.
const OFFileAttributeKey OFFileMSDOSAttributes
The MS-DOS attributes as an OFNumber.
The file can be executed by others.
Definition: OFFileManager.h:87
A class for storing arbitrary data in an array.
Definition: OFData.h:45
The file is a volume label.
Definition: OFFileManager.h:105
The file can be executed by the group.
Definition: OFFileManager.h:79
The file is made resident on first execution.
Definition: OFFileManager.h:75
const OFFileAttributeKey OFFileCreationDate
The creation date of the file as an OFDate.
The file can be read by others.
Definition: OFFileManager.h:91
const OFFileAttributeType OFFileTypeRegular
A regular file.
The file is hidden.
Definition: OFFileManager.h:101
The file cannot be read.
Definition: OFFileManager.h:67
const OFFileAttributeType OFFileTypeUnknown
An unknown file type.
OFString * currentDirectoryPath
The path of the current working directory.
Definition: OFFileManager.h:365
The file is a system file.
Definition: OFFileManager.h:103
const OFFileAttributeKey OFFileGroupOwnerAccountName
The account name of the group owner of the file as an OFString.
The file should be archived.
Definition: OFFileManager.h:109
OFMutableDictionary * OFMutableFileAttributes
A mutable dictionary mapping keys of type OFFileAttributeKey to their attribute values.
Definition: OFFileManager.h:167
OFConstantString * OFFileAttributeType
The type of a file.
Definition: OFFileManager.h:154