Browse Source

Allow using std::filesystem::path when constructing TFileInput / TFileOutput

thegeorg 1 year ago
parent
commit
2ec4b09046
2 changed files with 31 additions and 9 deletions
  1. 22 8
      util/stream/file.cpp
  2. 9 1
      util/stream/file.h

+ 22 - 8
util/stream/file.cpp

@@ -3,12 +3,19 @@
 #include <util/memory/blob.h>
 #include <util/generic/yexception.h>
 
+TUnbufferedFileInput::TUnbufferedFileInput(const char* path)
+    : TUnbufferedFileInput(TFile(path, OPEN_MODE))
+{
+}
+
 TUnbufferedFileInput::TUnbufferedFileInput(const TString& path)
-    : File_(path, OpenExisting | RdOnly | Seq)
+    : TUnbufferedFileInput(TFile(path, OPEN_MODE))
+{
+}
+
+TUnbufferedFileInput::TUnbufferedFileInput(const std::filesystem::path& path)
+    : TUnbufferedFileInput(TFile(path, OPEN_MODE))
 {
-    if (!File_.IsOpen()) {
-        ythrow TIoException() << "file " << path << " not open";
-    }
 }
 
 TUnbufferedFileInput::TUnbufferedFileInput(const TFile& file)
@@ -42,12 +49,19 @@ size_t TUnbufferedFileInput::DoSkip(size_t len) {
     return newPos - oldPos;
 }
 
+TUnbufferedFileOutput::TUnbufferedFileOutput(const char* path)
+    : TUnbufferedFileOutput(TFile(path, OPEN_MODE))
+{
+}
+
 TUnbufferedFileOutput::TUnbufferedFileOutput(const TString& path)
-    : File_(path, CreateAlways | WrOnly | Seq)
+    : TUnbufferedFileOutput(TFile(path, OPEN_MODE))
+{
+}
+
+TUnbufferedFileOutput::TUnbufferedFileOutput(const std::filesystem::path& path)
+    : TUnbufferedFileOutput(TFile(path, OPEN_MODE))
 {
-    if (!File_.IsOpen()) {
-        ythrow TFileError() << "can not open " << path;
-    }
 }
 
 TUnbufferedFileOutput::TUnbufferedFileOutput(const TFile& file)

+ 9 - 1
util/stream/file.h

@@ -22,10 +22,14 @@
  */
 class TUnbufferedFileInput: public IInputStream {
 public:
-    TUnbufferedFileInput(const TFile& file);
+    TUnbufferedFileInput(const char* path);
     TUnbufferedFileInput(const TString& path);
+    TUnbufferedFileInput(const std::filesystem::path& path);
+    TUnbufferedFileInput(const TFile& file);
 
 private:
+    static constexpr EOpenMode OPEN_MODE = OpenExisting | RdOnly | Seq;
+
     size_t DoRead(void* buf, size_t len) override;
     size_t DoSkip(size_t len) override;
 
@@ -55,7 +59,9 @@ private:
  */
 class TUnbufferedFileOutput: public IOutputStream {
 public:
+    TUnbufferedFileOutput(const char* path);
     TUnbufferedFileOutput(const TString& path);
+    TUnbufferedFileOutput(const std::filesystem::path& path);
     TUnbufferedFileOutput(const TFile& file);
     ~TUnbufferedFileOutput() override;
 
@@ -63,6 +69,8 @@ public:
     TUnbufferedFileOutput& operator=(TUnbufferedFileOutput&&) noexcept = default;
 
 private:
+    static constexpr EOpenMode OPEN_MODE = CreateAlways | WrOnly | Seq;
+
     void DoWrite(const void* buf, size_t len) override;
     void DoFlush() override;