OpenMS
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-2023.
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 
102  static bool executable(const String& file);
103 
118  static bool rename(const String& from, const String& to, bool overwrite_existing = true, bool verbose = true);
119 
136  enum class CopyOptions {OVERWRITE,SKIP,CANCEL};
137  static bool copyDirRecursively(const QString &from_dir, const QString &to_dir, File::CopyOptions option = CopyOptions::OVERWRITE);
138 
144  static bool remove(const String& file);
145 
147  static bool removeDirRecursively(const String& dir_name);
148 
150  static bool removeDir(const QString& dir_name);
151 
153  static String absolutePath(const String& file);
154 
158  static String basename(const String& file);
159 
164  static String path(const String& file);
165 
167  static bool readable(const String& file);
168 
170  static bool writable(const String& file);
171 
173  static bool isDirectory(const String& path);
174 
185  static String find(const String& filename, StringList directories = StringList());
186 
193  static bool fileList(const String& dir, const String& file_pattern, StringList& output, bool full_path = false);
194 
211  static String findDoc(const String& filename);
212 
219  static String getUniqueName(bool include_hostname = true);
220 
223 
226 
233 
240 
247 
251  static String findDatabase(const String& db_name);
252 
263  static StringList getPathLocations(const String& path = std::getenv("PATH"));
264 
278  static bool findExecutable(OpenMS::String& exe_filename);
279 
286  static String findSiblingTOPPExecutable(const String& toolName);
287 
304  static String getTemporaryFile(const String& alternative_file = "");
305 
326  static bool validateMatchingFileNames(const StringList& sl1, const StringList& sl2, bool basename = true, bool ignore_extension = true, bool strict = false);
327 
333  static void download(const std::string& url, const std::string& download_folder);
334 
335 private:
336 
339 
341  static bool isOpenMSDataPath_(const String& path);
342 
343 #ifdef OPENMS_WINDOWSPLATFORM
354  static StringList executableExtensions_(const String& ext = std::getenv("PATHEXT"));
355 #endif
356 
361  {
362  public:
363  TemporaryFiles_(const TemporaryFiles_&) = delete; // copy is forbidden
368 
370  private:
372  std::mutex mtx_;
373  };
374 
375 
378  };
379 }
380 
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:361
StringList filenames_
Definition: File.h:371
String newFile()
create a new filename and queue internally for deletion
TemporaryFiles_(const TemporaryFiles_ &)=delete
std::mutex mtx_
Definition: File.h:372
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 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 bool executable(const String &file)
Method used to test if a file is executable.
static String getOpenMSDataPath()
Returns the OpenMS data path (environment variable overwrites the default installation path)
CopyOptions
Copy directory recursively.
Definition: File.h:136
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 getTemporaryFile(const String &alternative_file="")
Obtain a temporary filename, ensuring automatic deletion upon exit.
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 void download(const std::string &url, const std::string &download_folder)
Download file from given URL into a download folder. Returns when done. Throws FileNotFound exception...
static Param getSystemParameters()
static TemporaryFiles_ temporary_files_
private list of temporary filenames, which are deleted upon program exit
Definition: File.h:377
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:60
Base class for TOPP applications.
Definition: TOPPBase.h:148
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:48