github.com/0chain/gosdk@v1.17.11/core/sys/fs_disk.go (about)

     1  package sys
     2  
     3  import (
     4  	"io/fs"
     5  	"os"
     6  	"path/filepath"
     7  )
     8  
     9  // DiskFS implement file system on disk
    10  type DiskFS struct {
    11  }
    12  
    13  // NewDiskFS create DiskFS instance
    14  func NewDiskFS() FS {
    15  	return &DiskFS{}
    16  }
    17  
    18  // Open opens the named file for reading. If successful, methods on
    19  // the returned file can be used for reading; the associated file
    20  // descriptor has mode O_RDONLY.
    21  // If there is an error, it will be of type *PathError.
    22  func (dfs *DiskFS) Open(name string) (File, error) {
    23  	return dfs.OpenFile(name, os.O_RDONLY, 0)
    24  }
    25  
    26  func (dfs *DiskFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
    27  	dir := filepath.Dir(name)
    28  	if _, err := os.Stat(dir); os.IsNotExist(err) {
    29  		if err := os.MkdirAll(dir, 0744); err != nil {
    30  			return nil, err
    31  		}
    32  	}
    33  	return os.OpenFile(name, flag, perm)
    34  }
    35  
    36  // ReadFile reads the file named by filename and returns the contents.
    37  func (dfs *DiskFS) ReadFile(name string) ([]byte, error) {
    38  	return os.ReadFile(name)
    39  }
    40  
    41  // WriteFile writes data to a file named by filename.
    42  func (dfs *DiskFS) WriteFile(name string, data []byte, perm os.FileMode) error {
    43  	return os.WriteFile(name, data, perm)
    44  }
    45  
    46  // Remove removes the named file or (empty) directory.
    47  // If there is an error, it will be of type *PathError.
    48  func (dfs *DiskFS) Remove(name string) error {
    49  	return os.Remove(name)
    50  }
    51  
    52  // MkdirAll creates a directory named path
    53  func (dfs *DiskFS) MkdirAll(path string, perm os.FileMode) error {
    54  	return os.MkdirAll(path, perm)
    55  }
    56  
    57  // Stat returns a FileInfo describing the named file.
    58  // If there is an error, it will be of type *PathError.
    59  func (dfs *DiskFS) Stat(name string) (fs.FileInfo, error) {
    60  	return os.Stat(name)
    61  }
    62  
    63  func (dfs *DiskFS) LoadProgress(progressID string) ([]byte, error) {
    64  	return dfs.ReadFile(progressID)
    65  }
    66  
    67  func (dfs *DiskFS) SaveProgress(progressID string, data []byte, perm fs.FileMode) error {
    68  	return dfs.WriteFile(progressID, data, perm)
    69  }
    70  
    71  func (dfs *DiskFS) RemoveProgress(progressID string) error {
    72  	return dfs.Remove(progressID)
    73  }
    74  
    75  func (dfs *DiskFS) CreateDirectory(_ string) error {
    76  	return nil
    77  }
    78  
    79  func (dfs *DiskFS) GetFileHandler(_, name string) (File, error) {
    80  	dir := filepath.Dir(name)
    81  	if _, err := os.Stat(dir); os.IsNotExist(err) {
    82  		if err := os.MkdirAll(dir, 0744); err != nil {
    83  			return nil, err
    84  		}
    85  	}
    86  	return os.OpenFile(name, os.O_CREATE|os.O_WRONLY, 0644)
    87  }
    88  
    89  func (dfs *DiskFS) RemoveAllDirectories() {
    90  }