neoGFX
Cross-platform C++ app/game engine
Loading...
Searching...
No Matches
file.hpp
Go to the documentation of this file.
1// file.hpp v1.3.1
2/*
3 * Copyright (c) 2007 Leigh Johnston.
4 *
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are
9 * met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 *
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 *
18 * * Neither the name of Leigh Johnston nor the names of any
19 * other contributors to this software may be used to endorse or
20 * promote products derived from this software without specific prior
21 * written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*/
35
36#pragma once
37
38#include <neolib/neolib.hpp>
39#include <memory>
40#include <string>
41#include <cstdio>
42#include <ctime>
43
44namespace neolib
45{
46 NEOLIB_EXPORT std::string tidy_path(std::string aPath);
47 NEOLIB_EXPORT std::wstring tidy_path(std::wstring aPath);
48 NEOLIB_EXPORT std::string convert_path(const std::wstring& aString);
49 NEOLIB_EXPORT std::wstring convert_path(const std::string& aString);
50 NEOLIB_EXPORT const std::string& create_path(const std::string& aPath);
51 NEOLIB_EXPORT const std::wstring& create_path(const std::wstring& aPath);
52 NEOLIB_EXPORT std::string create_file(const std::string& aFileName);
53 NEOLIB_EXPORT void create_file(const std::wstring& aFileName);
54 NEOLIB_EXPORT bool file_exists(const std::string& aPath);
55 NEOLIB_EXPORT bool file_exists(const std::wstring& aPath);
56 NEOLIB_EXPORT std::time_t file_date(const std::string& aPath);
57 NEOLIB_EXPORT std::time_t file_date(const std::wstring& aPath);
58 NEOLIB_EXPORT std::string file_ext(const std::string& aPath);
59 NEOLIB_EXPORT std::wstring file_ext(const std::wstring& aPath);
60 NEOLIB_EXPORT bool can_read_file(const std::string& aPath);
61 NEOLIB_EXPORT bool can_read_file(const std::wstring& aPath);
62 NEOLIB_EXPORT unsigned long file_size(const std::string& aPath);
63 NEOLIB_EXPORT unsigned long file_size(const std::wstring& aPath);
64 NEOLIB_EXPORT unsigned long long large_file_size(const std::string& aPath);
65 NEOLIB_EXPORT unsigned long long large_file_size(const std::wstring& aPath);
66 NEOLIB_EXPORT int large_file_seek(FILE* aStream, long long aOffset, int aOrigin);
67 NEOLIB_EXPORT bool move_file(const std::string& aPathFrom, const std::string& aPathTo);
68 NEOLIB_EXPORT std::string program_file();
69 NEOLIB_EXPORT std::string program_directory();
70 NEOLIB_EXPORT std::string user_documents_directory();
71 NEOLIB_EXPORT std::string user_settings_directory();
72
73 class NEOLIB_EXPORT simple_file
74 {
75 // types
76 private:
77 struct handle
78 {
79 std::FILE* iHandle;
80 handle(FILE* aHandle) : iHandle(aHandle) {}
81 ~handle() { if (iHandle != NULL) fclose(iHandle); }
82 };
83 // construction
84 public:
86 simple_file(const std::string& aPath, const std::string& aMode);
87#ifdef _WIN32
88 simple_file(const std::wstring& aPath, const std::wstring& aMode);
89#endif
90 // operations
91 public:
92 bool valid() const { return iFile && iFile->iHandle != NULL; }
93 operator std::FILE*() const { return iFile ? iFile->iHandle : NULL; }
94 void close() { iFile.reset(); }
95 int error() const { return iError; }
96 // attributes
97 private:
98 std::shared_ptr<handle> iFile;
99 int iError;
100 };
101}
int error() const
Definition file.hpp:95
simple_file(const std::string &aPath, const std::string &aMode)
bool valid() const
Definition file.hpp:92
NEOLIB_EXPORT unsigned long long large_file_size(const std::string &aPath)
NEOLIB_EXPORT std::time_t file_date(const std::string &aPath)
NEOLIB_EXPORT const std::string & create_path(const std::string &aPath)
NEOLIB_EXPORT std::string user_settings_directory()
NEOLIB_EXPORT std::string user_documents_directory()
NEOLIB_EXPORT std::string tidy_path(std::string aPath)
NEOLIB_EXPORT std::string program_file()
NEOLIB_EXPORT std::string convert_path(const std::wstring &aString)
NEOLIB_EXPORT unsigned long file_size(const std::string &aPath)
NEOLIB_EXPORT int large_file_seek(FILE *aStream, long long aOffset, int aOrigin)
NEOLIB_EXPORT std::string create_file(const std::string &aFileName)
NEOLIB_EXPORT bool can_read_file(const std::string &aPath)
NEOLIB_EXPORT std::string file_ext(const std::string &aPath)
NEOLIB_EXPORT bool move_file(const std::string &aPathFrom, const std::string &aPathTo)
NEOLIB_EXPORT bool file_exists(const std::string &aPath)
NEOLIB_EXPORT std::string program_directory()