LMMS
Loading...
Searching...
No Matches
File.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the Water library.
5 Copyright (c) 2016 ROLI Ltd.
6 Copyright (C) 2017-2023 Filipe Coelho <falktx@falktx.com>
7
8 Permission is granted to use this software under the terms of the ISC license
9 http://www.isc.org/downloads/software-support-policy/isc-license/
10
11 Permission to use, copy, modify, and/or distribute this software for any
12 purpose with or without fee is hereby granted, provided that the above
13 copyright notice and this permission notice appear in all copies.
14
15 THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD
16 TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17 FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
18 OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
19 USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
21 OF THIS SOFTWARE.
22
23 ==============================================================================
24*/
25
26#ifndef WATER_FILE_H_INCLUDED
27#define WATER_FILE_H_INCLUDED
28
29#include "../containers/Array.h"
30#include "../misc/Result.h"
31#include "../text/String.h"
32
33#include <vector>
34
35namespace water {
36
37//==============================================================================
49class File
50{
51public:
52 //==============================================================================
60 File() noexcept;
61
72 File (const String& absolutePath);
73
75 File (const File&);
76
79
90 File& operator= (const String& newAbsolutePath);
91
93 File& operator= (const File& otherFile);
94
95 //==============================================================================
101 bool exists() const;
102
109 bool existsAsFile() const;
110
117 bool isDirectory() const;
118
121 bool isNull() const;
122
125 bool isNotNull() const;
126
131 int64 getSize() const;
132
139
140 //==============================================================================
153
167 String getFileName() const;
168
184 String getRelativePathFrom (const File& directoryToBeRelativeTo) const;
185
186 //==============================================================================
195 String getFileExtension() const;
196
208 bool hasFileExtension (StringRef extensionToTest) const;
209
220 File withFileExtension (StringRef newExtension) const;
221
229
230 //==============================================================================
245 File getChildFile (StringRef relativeOrAbsolutePath) const;
246
253 File getSiblingFile (StringRef siblingFileName) const;
254
255 //==============================================================================
260 File getParentDirectory() const;
261
271 bool isAChildOf (const File& potentialParentDirectory) const;
272
273 //==============================================================================
291 File getNonexistentChildFile (const String& prefix,
292 const String& suffix,
293 bool putNumbersInBrackets = true) const;
294
304 File getNonexistentSibling (bool putNumbersInBrackets = true) const;
305
306 //==============================================================================
308 bool operator== (const File&) const;
310 bool operator!= (const File&) const;
312 bool operator< (const File&) const;
314 bool operator> (const File&) const;
315
316 //==============================================================================
324 bool hasWriteAccess() const;
325
329 bool isHidden() const;
330
331 //==============================================================================
338
344 int64 getLastAccessTime() const;
345
351 int64 getCreationTime() const;
352
353 //==============================================================================
368 Result create() const;
369
379 Result createDirectory() const;
380
390 bool deleteFile() const;
391
401 bool deleteRecursively() const;
402
417 bool moveFileTo (const File& targetLocation) const;
418
427 bool copyFileTo (const File& targetLocation) const;
428
439 bool replaceFileIn (const File& targetLocation) const;
440
454 bool copyDirectoryTo (const File& newDirectory) const;
455
456 //==============================================================================
466
484 uint findChildFiles (std::vector<File>& results,
485 int whatToLookFor,
486 bool searchRecursively,
487 const String& wildCardPattern = "*") const;
488
505 uint getNumberOfChildFiles (int whatToLookFor,
506 const String& wildCardPattern = "*") const;
507
511 bool containsSubDirectories() const;
512
513 //==============================================================================
521
532 FileOutputStream* createOutputStream (size_t bufferSize = 0x8000) const;
533
534 //==============================================================================
545 bool loadFileAsData (MemoryBlock& result) const;
546
554 String loadFileAsString() const;
555
559 void readLines (StringArray& destLines) const;
560
561 //==============================================================================
568 bool appendData (const void* dataToAppend,
569 size_t numberOfBytes) const;
570
585 bool replaceWithData (const void* dataToWrite,
586 size_t numberOfBytes) const;
587
600 bool appendText (const String& textToAppend,
601 bool asUnicode = false,
602 bool writeUnicodeHeaderBytes = false) const;
603
620 bool replaceWithText (const String& textToWrite,
621 bool asUnicode = false,
622 bool writeUnicodeHeaderBytes = false) const;
623
627 bool hasIdenticalContentTo (const File& other) const;
628
629 //==============================================================================
657
664
665 //==============================================================================
670 static File createTempFile (StringRef fileNameEnding);
671
672 //==============================================================================
677
685 bool setAsCurrentWorkingDirectory() const;
686
687 //==============================================================================
691 static const water_uchar separator;
692
697
698 //==============================================================================
710 static String createLegalFileName (const String& fileNameToFix);
711
719 static String createLegalPathName (const String& pathNameToFix);
720
722 static bool areFileNamesCaseSensitive();
723
725 static bool isAbsolutePath (StringRef path);
726
732 static File createFileWithoutCheckingPath (const String& absolutePath) noexcept;
733
735 static String addTrailingSeparator (const String& path);
736
737 //==============================================================================
739 bool createSymbolicLink (const File& linkFileToCreate, bool overwriteExisting) const;
740
742 bool isSymbolicLink() const;
743
747 File getLinkedTarget() const;
748
749 //==============================================================================
751 {
752 NaturalFileComparator (bool shouldPutFoldersFirst) noexcept : foldersFirst (shouldPutFoldersFirst) {}
753
754 int compareElements (const File& firstFile, const File& secondFile) const
755 {
756 if (foldersFirst && (firstFile.isDirectory() != secondFile.isDirectory()))
757 return firstFile.isDirectory() ? -1 : 1;
758
760 }
761
763 };
764
765private:
766 //==============================================================================
768
769 static String parseAbsolutePath (const String&);
771
773 bool copyInternal (const File&) const;
774 bool moveInternal (const File&) const;
775 bool replaceInternal (const File&) const;
776 void getFileTimesInternal (int64& m, int64& a, int64& c) const;
777 bool setFileReadOnlyInternal (bool) const;
778 bool setFileExecutableInternal (bool) const;
779};
780
781}
782
783#endif // WATER_FILE_H_INCLUDED
unsigned int uint
Definition CarlaDefines.h:327
#define noexcept
Definition DistrhoDefines.h:72
uint8_t a
Definition Spc_Cpu.h:141
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
File() noexcept
Definition File.cpp:55
Definition File.h:50
bool copyInternal(const File &) const
Definition File.cpp:1620
static const water_uchar separator
Definition File.h:691
bool hasFileExtension(StringRef extensionToTest) const
Definition File.cpp:690
bool hasIdenticalContentTo(const File &other) const
Definition File.cpp:795
bool existsAsFile() const
Definition File.cpp:1320
bool copyDirectoryTo(const File &newDirectory) const
Definition File.cpp:314
int64 getLastAccessTime() const
Definition File.cpp:541
File & operator=(const String &newAbsolutePath)
Definition File.cpp:77
File withFileExtension(StringRef newExtension) const
Definition File.cpp:715
static File createFileWithoutCheckingPath(const String &absolutePath) noexcept
Definition File.cpp:65
static File getCurrentWorkingDirectory()
Definition File.cpp:1395
static File createTempFile(StringRef fileNameEnding)
Definition File.cpp:953
bool deleteFile() const
Definition File.cpp:1358
int64 getCreationTime() const
Definition File.cpp:548
bool moveFileTo(const File &targetLocation) const
Definition File.cpp:276
uint getNumberOfChildFiles(int whatToLookFor, const String &wildCardPattern="*") const
Definition File.cpp:597
String fullPath
Definition File.h:767
String getFileExtension() const
Definition File.cpp:680
String getRelativePathFrom(const File &directoryToBeRelativeTo) const
Definition File.cpp:892
int64 getLastModificationTime() const
Definition File.cpp:534
String getPathUpToLastSlash() const
Definition File.cpp:352
File() noexcept
Definition File.cpp:55
bool operator<(const File &) const
Definition File.cpp:256
bool replaceWithData(const void *dataToWrite, size_t numberOfBytes) const
Definition File.cpp:764
static String parseAbsolutePath(const String &)
Definition File.cpp:138
static bool isAbsolutePath(StringRef path)
Definition File.cpp:406
TypesOfFileToFind
Definition File.h:460
@ findDirectories
Definition File.h:461
@ findFiles
Definition File.h:462
@ ignoreHiddenFiles
Definition File.h:464
@ findFilesAndDirectories
Definition File.h:463
static String createLegalFileName(const String &fileNameToFix)
Definition File.cpp:848
static const String separatorString
Definition File.h:696
void getFileTimesInternal(int64 &m, int64 &a, int64 &c) const
Definition File.cpp:1336
FileInputStream * createInputStream() const
Definition File.cpp:733
File getNonexistentSibling(bool putNumbersInBrackets=true) const
Definition File.cpp:669
bool deleteRecursively() const
Definition File.cpp:260
bool isAChildOf(const File &potentialParentDirectory) const
Definition File.cpp:389
bool moveInternal(const File &) const
Definition File.cpp:1369
bool appendText(const String &textToAppend, bool asUnicode=false, bool writeUnicodeHeaderBytes=false) const
Definition File.cpp:775
SpecialLocationType
Definition File.h:633
@ winProgramFiles
Definition File.h:655
@ currentExecutableFile
Definition File.h:649
@ userHomeDirectory
Definition File.h:635
@ tempDirectory
Definition File.h:640
@ hostApplicationPath
Definition File.h:652
@ winMyDocuments
Definition File.h:655
@ winAppData
Definition File.h:655
@ winCommonProgramFiles
Definition File.h:655
static String addTrailingSeparator(const String &path)
Definition File.cpp:225
void readLines(StringArray &destLines) const
Definition File.cpp:575
Result create() const
Definition File.cpp:494
bool loadFileAsData(MemoryBlock &result) const
Definition File.cpp:556
Result createDirectory() const
Definition File.cpp:515
bool setFileReadOnlyInternal(bool) const
File getChildFile(StringRef relativeOrAbsolutePath) const
Definition File.cpp:418
bool setAsCurrentWorkingDirectory() const
Definition File.cpp:1414
bool replaceWithText(const String &textToWrite, bool asUnicode=false, bool writeUnicodeHeaderBytes=false) const
Definition File.cpp:786
String getFileNameWithoutExtension() const
Definition File.cpp:378
bool containsSubDirectories() const
Definition File.cpp:607
bool isNotNull() const
Definition File.cpp:94
bool replaceFileIn(const File &targetLocation) const
Definition File.cpp:299
bool isNull() const
Definition File.cpp:89
bool createSymbolicLink(const File &linkFileToCreate, bool overwriteExisting) const
Definition File.cpp:965
bool exists() const
Definition File.cpp:1314
File getLinkedTarget() const
Definition File.cpp:1610
static bool areFileNamesCaseSensitive()
Definition File.cpp:236
bool isDirectory() const
Definition File.cpp:1306
const String & getFullPathName() const noexcept
Definition File.h:152
int64 getSize() const
Definition File.cpp:1352
bool operator>(const File &) const
Definition File.cpp:257
bool operator==(const File &) const
Definition File.cpp:254
bool setFileExecutableInternal(bool) const
FileOutputStream * createOutputStream(size_t bufferSize=0x8000) const
Definition File.cpp:743
String getFileName() const
Definition File.cpp:373
bool operator!=(const File &) const
Definition File.cpp:255
bool copyFileTo(const File &targetLocation) const
Definition File.cpp:293
bool isHidden() const
static String descriptionOfSizeInBytes(int64 bytes)
Definition File.cpp:479
File getSiblingFile(StringRef siblingFileName) const
Definition File.cpp:473
bool replaceInternal(const File &) const
Definition File.cpp:1385
String loadFileAsString() const
Definition File.cpp:565
static String createLegalPathName(const String &pathNameToFix)
Definition File.cpp:833
Result createDirectoryInternal(const String &) const
Definition File.cpp:1390
~File() noexcept
Definition File.h:78
File getParentDirectory() const
Definition File.cpp:365
bool appendData(const void *dataToAppend, size_t numberOfBytes) const
Definition File.cpp:752
static File getSpecialLocation(const SpecialLocationType type)
Definition File.cpp:1642
File getNonexistentChildFile(const String &prefix, const String &suffix, bool putNumbersInBrackets=true) const
Definition File.cpp:617
bool isSymbolicLink() const
Definition File.cpp:1605
uint findChildFiles(std::vector< File > &results, int whatToLookFor, bool searchRecursively, const String &wildCardPattern="*") const
Definition File.cpp:581
bool hasWriteAccess() const
Definition File.cpp:1325
Definition FileInputStream.h:41
Definition FileOutputStream.h:42
Definition MemoryBlock.h:39
Definition Result.h:64
Definition StringArray.h:41
Definition String.h:48
int compareNatural(StringRef other, bool isCaseSensitive=false) const noexcept
Definition String.cpp:622
Definition StringRef.h:67
unsigned * m
Definition inflate.c:1559
Definition AudioSampleBuffer.h:33
long long int64
Definition water.h:100
uint32 water_uchar
Definition CharacterFunctions.h:38
NaturalFileComparator(bool shouldPutFoldersFirst) noexcept
Definition File.h:752
bool foldersFirst
Definition File.h:762
int compareElements(const File &firstFile, const File &secondFile) const
Definition File.h:754
NaturalFileComparator(bool shouldPutFoldersFirst) noexcept
Definition File.h:752
return c
Definition crypt.c:175
int result
Definition process.c:1455
#define const
Definition zconf.h:137