go-fs

Filesystem library for Go, implementing FAT filesystems so far.

  • 所有者: mitchellh/go-fs
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

FAT Filesystem Library for Go

This library implements the ability to create, read, and write
FAT filesystems using pure Go.

WARNING: While the implementation works (to some degree, see the
limitations section below), I highly recommend you don't use this
library, since it has many limitations and is generally a terrible
implementation of FAT. For educational purposes, however, this library
may be interesting.

In this library's current state, it is very good for reading FAT
filesystems, and minimally useful for creating FAT filesystems. See
the features and limitations below.

Features & Limitations

Features:

  • Format a brand new FAT filesystem on a file backed device
  • Create files and directories
  • Traverse filesystem

Limitations:

This library has several limitations. They're easily able to be overcome,
but because I didn't need them for my use case, I didn't bother:

  • Files/directories cannot be deleted or renamed.
  • Files never shrink in size.
  • Deleted file/directory entries are never reclaimed, so fragmentation
    grows towards infinity. Eventually, your "disk" will become full even
    if you just create and delete a single file.
  • There are some serious corruption possibilities in error cases. Cleanup
    is not good.
  • Incomplete FAT32 implementation (although FAT12 and FAT16 are complete).

Usage

Here is some example usage where an existing disk image is read and
a file is created in the root directory:

// Assume this file was created already with a FAT filesystem
f, err := os.OpenFile("FLOPPY.dmg", os.O_RDWR, os.O_CREATE, 0666)
if err != nil {
	panic(err)
}
defer f.Close()

// BlockDevice backed by a file
device, err := fs.NewFileDisk(f)
if err != nil {
	panic(err)
}

filesys, err := fat.New(device)
if err != nil {
	panic(err)
}

rootDir, err := filesys.RootDir()
if err != nil {
	panic(err)
}

subEntry, err := rootDir.AddFile("HELLO_WORLD")
if err != nil {
	panic(err)
}

file, err := subEntry.File()
if err != nil {
	panic(err)
}

_, err = io.WriteString(file, "I am the contents of this file.")
if err != nil {
	panic(err)
}

Thanks

Thanks to the following resources which helped in the creation of this
library:

主要指標

概覽
名稱與所有者mitchellh/go-fs
主編程語言Go
編程語言Go (語言數: 1)
平台
許可證MIT License
所有者活动
創建於2013-06-30 03:22:42
推送於2018-05-08 16:18:24
最后一次提交2018-04-02 16:53:30
發布數0
用户参与
星數89
關注者數7
派生數19
提交數74
已啟用問題?
問題數8
打開的問題數2
拉請求數7
打開的拉請求數1
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?