mirror of
https://github.com/golang/go
synced 2024-10-05 12:21:22 -06:00
97 lines
1.8 KiB
Go
97 lines
1.8 KiB
Go
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// This file defines abstract file system access.
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
|
||
|
// The FileInfo interface provides access to file information.
|
||
|
type FileInfo interface {
|
||
|
Name() string
|
||
|
Size() int64
|
||
|
IsRegular() bool
|
||
|
IsDirectory() bool
|
||
|
}
|
||
|
|
||
|
|
||
|
// The FileSystem interface specifies the methods godoc is using
|
||
|
// to access the file system for which it serves documentation.
|
||
|
type FileSystem interface {
|
||
|
Open(path string) (io.ReadCloser, os.Error)
|
||
|
Lstat(path string) (FileInfo, os.Error)
|
||
|
Stat(path string) (FileInfo, os.Error)
|
||
|
ReadDir(path string) ([]FileInfo, os.Error)
|
||
|
ReadFile(path string) ([]byte, os.Error)
|
||
|
}
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// OS-specific FileSystem implementation
|
||
|
|
||
|
var OS FileSystem = osFS{}
|
||
|
|
||
|
|
||
|
// osFI is the OS-specific implementation of FileInfo.
|
||
|
type osFI struct {
|
||
|
*os.FileInfo
|
||
|
}
|
||
|
|
||
|
|
||
|
func (fi osFI) Name() string {
|
||
|
return fi.FileInfo.Name
|
||
|
}
|
||
|
|
||
|
|
||
|
func (fi osFI) Size() int64 {
|
||
|
if fi.IsDirectory() {
|
||
|
return 0
|
||
|
}
|
||
|
return fi.FileInfo.Size
|
||
|
}
|
||
|
|
||
|
|
||
|
// osFS is the OS-specific implementation of FileSystem
|
||
|
type osFS struct{}
|
||
|
|
||
|
func (osFS) Open(path string) (io.ReadCloser, os.Error) {
|
||
|
return os.Open(path)
|
||
|
}
|
||
|
|
||
|
|
||
|
func (osFS) Lstat(path string) (FileInfo, os.Error) {
|
||
|
fi, err := os.Lstat(path)
|
||
|
return osFI{fi}, err
|
||
|
}
|
||
|
|
||
|
|
||
|
func (osFS) Stat(path string) (FileInfo, os.Error) {
|
||
|
fi, err := os.Stat(path)
|
||
|
return osFI{fi}, err
|
||
|
}
|
||
|
|
||
|
|
||
|
func (osFS) ReadDir(path string) ([]FileInfo, os.Error) {
|
||
|
l0, err := ioutil.ReadDir(path)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
l1 := make([]FileInfo, len(l0))
|
||
|
for i, e := range l0 {
|
||
|
l1[i] = osFI{e}
|
||
|
}
|
||
|
return l1, nil
|
||
|
}
|
||
|
|
||
|
|
||
|
func (osFS) ReadFile(path string) ([]byte, os.Error) {
|
||
|
return ioutil.ReadFile(path)
|
||
|
}
|