OpenMS  2.7.0
File.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2021.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Chris Bielow $
32 // $Authors: Andreas Bertsch, Chris Bielow, Marc Sturm $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
38 #include <OpenMS/config.h>
39 #include <cstdlib>
40 #include <mutex>
41 
42 
43 namespace OpenMS
44 {
45  class Param;
46  class TOPPBase;
47 
53  class OPENMS_DLLAPI File
54  {
55 public:
56 
57  friend class TOPPBase;
58 
64  class OPENMS_DLLAPI TempDir
65  {
66  public:
67 
70  TempDir(bool keep_dir = false);
71 
74 
76  TempDir(const TempDir&) = delete;
77  TempDir& operator=(const TempDir&) = delete;
78  TempDir(TempDir&&) = delete;
79  TempDir& operator=(TempDir&&) = delete;
80 
82  const String& getPath() const;
83 
84  private:
86  bool keep_dir_;
87  };
88 
94 
96  static bool exists(const String& file);
97 
99  static bool empty(const String& file);
100 
115  static bool rename(const String& from, const String& to, bool overwrite_existing = true, bool verbose = true);
116 
133  enum class CopyOptions {OVERWRITE,SKIP,CANCEL};
134  static bool copyDirRecursively(const QString &from_dir, const QString &to_dir, File::CopyOptions option = CopyOptions::OVERWRITE);
135 
141  static bool remove(const String& file);
142 
144  static bool removeDirRecursively(const String& dir_name);
145 
147  static bool removeDir(const QString& dir_name);
148 
150  static String absolutePath(const String& file);
151 
155  static String basename(const String& file);
156 
161  static String path(const String& file);
162 
164  static bool readable(const String& file);
165 
167  static bool writable(const String& file);
168 
170  static bool isDirectory(const String& path);
171 
182  static String find(const String& filename, StringList directories = StringList());
183 
190  static bool fileList(const String& dir, const String& file_pattern, StringList& output, bool full_path = false);
191 
208  static String findDoc(const String& filename);
209 
216  static String getUniqueName(bool include_hostname = true);
217 
220 
223 
230 
237 
244 
248  static String findDatabase(const String& db_name);
249 
260  static StringList getPathLocations(const String& path = std::getenv("PATH"));
261 
275  static bool findExecutable(OpenMS::String& exe_filename);
276 
283  static String findSiblingTOPPExecutable(const String& toolName);
284 
301  static const String& getTemporaryFile(const String& alternative_file = "");
302 
323  static bool validateMatchingFileNames(const StringList& sl1, const StringList& sl2, bool basename = true, bool ignore_extension = true, bool strict = false);
324 private:
325 
328 
330  static bool isOpenMSDataPath_(const String& path);
331 
332 #ifdef OPENMS_WINDOWSPLATFORM
343  static StringList executableExtensions_(const String& ext = std::getenv("PATHEXT"));
344 #endif
345 
350  {
351  public:
354  const String& newFile();
355 
357  private:
358  TemporaryFiles_(const TemporaryFiles_&) = delete; // copy is forbidden
361  std::mutex mtx_;
362  };
363 
364 
367  };
368 }
369 
Class representing a temporary directory.
Definition: File.h:65
TempDir & operator=(TempDir &&)=delete
TempDir & operator=(const TempDir &)=delete
String temp_dir_
Definition: File.h:85
~TempDir()
Destroy temporary folder (can be prohibited in Constructor)
TempDir(bool keep_dir=false)
TempDir(const TempDir &)=delete
delete all means to copy or move a TempDir
TempDir(TempDir &&)=delete
const String & getPath() const
Return path to temporary folder.
bool keep_dir_
Definition: File.h:86
Internal helper class, which holds temporary filenames and deletes these files at program exit.
Definition: File.h:350
const String & newFile()
create a new filename and queue internally for deletion
StringList filenames_
Definition: File.h:360
TemporaryFiles_(const TemporaryFiles_ &)=delete
std::mutex mtx_
Definition: File.h:361
TemporaryFiles_ & operator=(const TemporaryFiles_ &)=delete
Basic file handling operations.
Definition: File.h:54
static bool removeDirRecursively(const String &dir_name)
Removes the subdirectories of the specified directory (absolute path). Returns true if successful.
static String getOpenMSHomePath()
Returns the OpenMS home path (environment variable overwrites the default home path)
static const String & getTemporaryFile(const String &alternative_file="")
Obtain a temporary filename, ensuring automatic deletion upon exit.
static bool exists(const String &file)
Method used to test if a file exists.
static bool copyDirRecursively(const QString &from_dir, const QString &to_dir, File::CopyOptions option=CopyOptions::OVERWRITE)
static bool validateMatchingFileNames(const StringList &sl1, const StringList &sl2, bool basename=true, bool ignore_extension=true, bool strict=false)
Helper function to test if filenames provided in two StringLists match.
static String getExecutablePath()
static bool fileList(const String &dir, const String &file_pattern, StringList &output, bool full_path=false)
Retrieves a list of files matching file_pattern in directory dir (returns filenames without paths unl...
static String getOpenMSDataPath()
Returns the OpenMS data path (environment variable overwrites the default installation path)
CopyOptions
Copy directory recursively.
Definition: File.h:133
static Param getSystemParameterDefaults_()
get defaults for the system's Temp-path, user home directory etc.
static String findDoc(const String &filename)
Resolves a partial file name to a documentation file in the doc-folder.
static String path(const String &file)
static String getUserDirectory()
static String findSiblingTOPPExecutable(const String &toolName)
Searches for an executable with the given name.
static String absolutePath(const String &file)
Replaces the relative path in the argument with the absolute path.
static String basename(const String &file)
static String getUniqueName(bool include_hostname=true)
Returns a string, consisting of date, time, hostname, process id, and a incrementing number....
static bool writable(const String &file)
Return true if the file is writable.
static bool remove(const String &file)
Removes a file (if it exists).
static String find(const String &filename, StringList directories=StringList())
Looks up the location of the file filename.
static String getTempDirectory()
static String findDatabase(const String &db_name)
static StringList getPathLocations(const String &path=std::getenv("PATH"))
Extract list of directories from a concatenated string (usually $PATH).
static bool findExecutable(OpenMS::String &exe_filename)
Searches for an executable with the given name (similar to where (Windows) or which (Linux/MacOS)
static bool readable(const String &file)
Return true if the file exists and is readable.
static bool isOpenMSDataPath_(const String &path)
Check if the given path is a valid OPENMS_DATA_PATH.
static Param getSystemParameters()
static TemporaryFiles_ temporary_files_
private list of temporary filenames, which are deleted upon program exit
Definition: File.h:366
static bool isDirectory(const String &path)
Return true if the given path specifies a directory.
static bool removeDir(const QString &dir_name)
Removes the directory and all subdirectories (absolute path).
static bool empty(const String &file)
Return true if the file does not exist or the file is empty.
static bool rename(const String &from, const String &to, bool overwrite_existing=true, bool verbose=true)
Rename a file.
Management and storage of parameters / INI files.
Definition: Param.h:70
A more convenient string class.
Definition: String.h:61
Base class for TOPP applications.
Definition: TOPPBase.h:145
std::vector< String > StringList
Vector of String.
Definition: ListUtils.h:70
int verbose
Verbosity level ( "-v" is 1 and "-V" is 2 )
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47