19 #define OIIO_FILESYSTEM_H
35 #if defined(_WIN32) && defined(__GLIBCXX__)
36 # define OIIO_FILESYSTEM_USE_STDIO_FILEBUF 1
43 #define OIIO_FILESYSTEM_SUPPORTS_IOPROXY 1
49 #if OIIO_FILESYSTEM_USE_STDIO_FILEBUF
54 typedef basic_ifstream<char>
ifstream;
55 typedef basic_ofstream<char>
ofstream;
66 namespace Filesystem {
75 bool include_dot=
true) noexcept;
86 const std::string &new_extension) noexcept;
101 std::vector<std::string> &dirs,
102 bool validonly =
false)
118 const std::vector<std::string> &dirs,
120 bool recursive =
false);
134 std::vector<std::string> &filenames,
135 bool recursive =
false,
136 const std::string &filter_regex=std::string());
141 bool dot_is_absolute=
false);
174 return copy (from, to, err);
183 return rename (from, to, err);
191 return remove (
path, err);
238 std::ios_base::openmode
mode = std::ios_base::out);
254 size_t size = (1UL << 24));
262 size_t size = (1UL << 24));
277 out.write((
const char*)data.
data(), data.
size() *
sizeof(
T));
324 std::vector<int> &numbers);
336 int framepadding_override,
337 std::string &normalized_pattern,
338 std::string &framespec);
348 const std::vector<int> &numbers,
349 std::vector<std::string> &filenames);
360 const std::vector<int> &numbers,
361 const std::vector<string_view> &views,
362 std::vector<std::string> &filenames);
373 const std::vector<string_view> &views,
374 std::vector<int> &frame_numbers,
375 std::vector<string_view> &frame_views,
376 std::vector<std::string> &filenames);
385 std::vector<int> &numbers,
386 std::vector<std::string> &filenames);
396 bool simple_glob =
true);
405 enum Mode { Closed = 0, Read =
'r', Write =
'w' };
408 : m_filename(filename), m_mode(mode) {}
412 virtual const char* proxytype ()
const = 0;
415 virtual int64_t
tell () {
return m_pos; }
422 virtual size_t read (
void *
buf,
size_t size);
425 virtual size_t write (
const void *
buf,
size_t size);
432 virtual size_t pread (
void *
buf,
size_t size, int64_t
offset);
439 virtual size_t pwrite (
const void *
buf,
size_t size, int64_t
offset);
442 virtual size_t size ()
const {
return 0; }
446 const std::string&
filename ()
const {
return m_filename; }
448 return read (buf.
data(), buf.
size()*
sizeof(
T));
451 return write (buf.
data(), buf.
size()*
sizeof(
T));
454 return write (buf.
data(), buf.
size());
457 return seek ((origin ==
SEEK_SET ? offset : 0) +
458 (origin ==
SEEK_CUR ? offset+tell() : 0) +
462 #define OIIO_IOPROXY_HAS_ERROR 1
463 std::string
error()
const;
486 const char*
proxytype()
const override {
return "file"; }
487 void close()
override;
488 bool seek(int64_t
offset)
override;
489 size_t read(
void*
buf,
size_t size)
override;
490 size_t write(
const void*
buf,
size_t size)
override;
491 size_t pread(
void*
buf,
size_t size, int64_t
offset)
override;
492 size_t pwrite(
const void*
buf,
size_t size, int64_t
offset)
override;
493 size_t size()
const override;
494 void flush()
const override;
500 FILE* m_file =
nullptr;
502 bool m_auto_close =
false;
523 const char*
proxytype()
const override {
return "vecoutput"; }
524 size_t write(
const void*
buf,
size_t size)
override;
525 size_t pwrite(
const void*
buf,
size_t size, int64_t
offset)
override;
526 size_t size()
const override {
return m_buf.size(); }
529 std::vector<unsigned char>&
buffer()
const {
return m_buf; }
544 , m_buf((const unsigned char*)buf, size)
552 const char*
proxytype()
const override {
return "memreader"; }
558 size_t read(
void*
buf,
size_t size)
override;
559 size_t pread(
void*
buf,
size_t size, int64_t
offset)
override;
560 size_t size()
const override {
return m_buf.size(); }
OIIO_UTIL_API bool is_directory(string_view path) noexcept
OIIO_UTIL_API std::string filename_to_regex(string_view pattern, bool simple_glob=true)
IOMemReader(const void *buf, size_t size)
IOProxy(const std::wstring &filename, Mode mode)
GLenum GLuint GLenum GLsizei const GLchar * buf
size_t size() const override
const char * proxytype() const override
OIIO_NAMESPACE_BEGIN typedef std::ifstream ifstream
OIIO_UTIL_API std::time_t last_write_time(string_view path) noexcept
OIIO_UTIL_API bool parse_pattern(const char *pattern, int framepadding_override, std::string &normalized_pattern, std::string &framespec)
OIIO_UTIL_API std::string parent_path(string_view filepath) noexcept
GT_API const UT_StringHolder time
OIIO_UTIL_API bool copy(string_view from, string_view to, std::string &err)
const GLuint GLenum const void * binary
GLsizei const GLchar *const * path
IOProxy(string_view filename, Mode mode)
OIIO_UTIL_API unsigned long long remove_all(string_view path, std::string &err)
virtual void flush() const
OIIO_UTIL_API bool enumerate_file_sequence(const std::string &pattern, const std::vector< int > &numbers, std::vector< std::string > &filenames)
bool seek(int64_t offset) override
OIIO_UTIL_API void convert_native_arguments(int argc, const char *argv[])
Ensure command line arguments are UTF-8 everywhere.
String-related utilities, all in namespace Strutil.
size_t size() const override
bool write_binary_file(string_view filename, cspan< T > data)
OIIO_UTIL_API std::string searchpath_find(const std::string &filename, const std::vector< std::string > &dirs, bool testcwd=true, bool recursive=false)
OIIO_UTIL_API bool get_directory_entries(const std::string &dirname, std::vector< std::string > &filenames, bool recursive=false, const std::string &filter_regex=std::string())
constexpr auto in(type t, int set) -> bool
OIIO_UTIL_API std::vector< std::string > searchpath_split(string_view searchpath, bool validonly=false)
OIIO_UTIL_API std::string replace_extension(const std::string &filepath, const std::string &new_extension) noexcept
OIIO_UTIL_API bool read_text_file(string_view filename, std::string &str, size_t size=(1UL<< 24))
size_t read(span< T > buf)
OIIO_UTIL_API FILE * fopen(string_view path, string_view mode)
Version of fopen that can handle UTF-8 paths even on Windows.
OIIO_UTIL_API bool read_text_from_command(string_view command, std::string &str, size_t size=(1UL<< 24))
OIIO_UTIL_API uint64_t file_size(string_view path) noexcept
virtual bool seek(int64_t offset)
const char * proxytype() const override
virtual size_t size() const
OIIO_UTIL_API bool scan_for_matching_filenames(const std::string &pattern, const std::vector< string_view > &views, std::vector< int > &frame_numbers, std::vector< string_view > &frame_views, std::vector< std::string > &filenames)
OIIO_UTIL_API bool write_text_file(string_view filename, string_view str)
const char * proxytype() const override
OIIO_UTIL_API bool create_directory(string_view path, std::string &err)
OIIO_UTIL_API std::string current_path()
OIIO_UTIL_API std::string temp_directory_path()
size_t write(string_view buf)
constexpr size_type size() const noexcept
OIIO_UTIL_API bool exists(string_view path) noexcept
IOFile(const std::wstring &filename, Mode mode)
const std::string & filename() const
bool seek(int64_t offset, int origin)
OIIO_UTIL_API std::string filename(string_view filepath) noexcept
constexpr auto size() const noexcept-> size_t
IOProxy subclass for reading that wraps an cspan<char>.
OIIO_UTIL_API int fseek(FILE *file, int64_t offset, int whence)
OIIO_UTIL_API bool path_is_absolute(string_view path, bool dot_is_absolute=false)
OIIO_UTIL_API std::string generic_filepath(string_view filepath) noexcept
Utilities for dealing with fstream on MingW. Basically accepting wchar_t* filenames in the std::ifstr...
OIIO_UTIL_API bool rename(string_view from, string_view to, std::string &err)
virtual bool opened() const
IOMemReader(cspan< unsigned char > buf)
std::vector< unsigned char > & m_buf
OIIO_UTIL_API int64_t ftell(FILE *file)
Version of ftell that works with 64 bit offsets on all systems.
size_t write(span< T > buf)
constexpr auto data() const noexcept-> const Char *
OIIO_UTIL_API bool is_executable(string_view path) noexcept
OIIO_UTIL_API std::string unique_path(string_view model="%%%%-%%%%-%%%%-%%%%")
OIIO_UTIL_API void open(OIIO::ifstream &stream, string_view path, std::ios_base::openmode mode=std::ios_base::in)
#define OIIO_NAMESPACE_END
OIIO_UTIL_API bool is_regular(string_view path) noexcept
std::string OIIO_UTIL_API utf16_to_utf8(const std::wstring &utf16str) noexcept
OIIO_UTIL_API bool enumerate_sequence(string_view desc, std::vector< int > &numbers)
cspan< unsigned char > m_buf
std::vector< unsigned char > & buffer() const
constexpr pointer data() const noexcept
GLbitfield GLuint program
cspan< unsigned char > buffer() const noexcept
OIIO_UTIL_API std::string extension(string_view filepath, bool include_dot=true) noexcept
std::vector< unsigned char > m_local_buf
#define OIIO_NAMESPACE_BEGIN
IOVecOutput(std::vector< unsigned char > &buf)
OIIO_UTIL_API std::string find_program(string_view program)
OIIO_UTIL_API size_t read_bytes(string_view path, void *buffer, size_t n, size_t pos=0)