本文整理匯總了Golang中syscall.FindNextFile函數的典型用法代碼示例。如果您正苦於以下問題:Golang FindNextFile函數的具體用法?Golang FindNextFile怎麽用?Golang FindNextFile使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了FindNextFile函數的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: readdir
func (file *File) readdir(n int) (fi []FileInfo, err error) {
if file == nil {
return nil, syscall.EINVAL
}
if !file.isdir() {
return nil, &PathError{"Readdir", file.name, syscall.ENOTDIR}
}
if !file.dirinfo.isempty && file.fd == syscall.InvalidHandle {
return nil, syscall.EINVAL
}
wantAll := n <= 0
size := n
if wantAll {
n = -1
size = 100
}
fi = make([]FileInfo, 0, size) // Empty with room to grow.
d := &file.dirinfo.data
for n != 0 && !file.dirinfo.isempty {
if file.dirinfo.needdata {
e := syscall.FindNextFile(syscall.Handle(file.fd), d)
if e != nil {
if e == syscall.ERROR_NO_MORE_FILES {
break
} else {
err = &PathError{"FindNextFile", file.name, e}
if !wantAll {
fi = nil
}
return
}
}
}
file.dirinfo.needdata = true
name := string(syscall.UTF16ToString(d.FileName[0:]))
if name == "." || name == ".." { // Useless names
continue
}
f := &fileStat{
name: name,
sys: syscall.Win32FileAttributeData{
FileAttributes: d.FileAttributes,
CreationTime: d.CreationTime,
LastAccessTime: d.LastAccessTime,
LastWriteTime: d.LastWriteTime,
FileSizeHigh: d.FileSizeHigh,
FileSizeLow: d.FileSizeLow,
},
path: file.dirinfo.path + `\` + name,
}
n--
fi = append(fi, f)
}
if !wantAll && len(fi) == 0 {
return fi, io.EOF
}
return fi, nil
}
示例2: Readdir
// Readdir reads the contents of the directory associated with file and
// returns an array of up to n FileInfo structures, as would be returned
// by Lstat, in directory order. Subsequent calls on the same file will yield
// further FileInfos.
//
// If n > 0, Readdir returns at most n FileInfo structures. In this case, if
// Readdir returns an empty slice, it will return a non-nil error
// explaining why. At the end of a directory, the error is os.EOF.
//
// If n <= 0, Readdir returns all the FileInfo from the directory in
// a single slice. In this case, if Readdir succeeds (reads all
// the way to the end of the directory), it returns the slice and a
// nil os.Error. If it encounters an error before the end of the
// directory, Readdir returns the FileInfo read until that point
// and a non-nil error.
func (file *File) Readdir(n int) (fi []FileInfo, err Error) {
if file == nil || file.fd < 0 {
return nil, EINVAL
}
if !file.isdir() {
return nil, &PathError{"Readdir", file.name, ENOTDIR}
}
di := file.dirinfo
wantAll := n <= 0
size := n
if wantAll {
n = -1
size = 100
}
fi = make([]FileInfo, 0, size) // Empty with room to grow.
for n != 0 {
if di.usefirststat {
di.usefirststat = false
} else {
e := syscall.FindNextFile(syscall.Handle(file.fd), &di.stat.Windata)
if e != 0 {
if e == syscall.ERROR_NO_MORE_FILES {
break
} else {
err = &PathError{"FindNextFile", file.name, Errno(e)}
if !wantAll {
fi = nil
}
return
}
}
}
var f FileInfo
fileInfoFromWin32finddata(&f, &di.stat.Windata)
if f.Name == "." || f.Name == ".." { // Useless names
continue
}
n--
fi = append(fi, f)
}
if !wantAll && len(fi) == 0 {
return fi, EOF
}
return fi, nil
}
示例3: readdir
func (file *File) readdir(n int) (fi []FileInfo, err error) {
if file == nil || file.fd < 0 {
return nil, EINVAL
}
if !file.isdir() {
return nil, &PathError{"Readdir", file.name, ENOTDIR}
}
wantAll := n <= 0
size := n
if wantAll {
n = -1
size = 100
}
fi = make([]FileInfo, 0, size) // Empty with room to grow.
d := &file.dirinfo.data
for n != 0 {
if file.dirinfo.needdata {
e := syscall.FindNextFile(syscall.Handle(file.fd), d)
if e != nil {
if e == syscall.ERROR_NO_MORE_FILES {
break
} else {
err = &PathError{"FindNextFile", file.name, e}
if !wantAll {
fi = nil
}
return
}
}
}
file.dirinfo.needdata = true
name := string(syscall.UTF16ToString(d.FileName[0:]))
if name == "." || name == ".." { // Useless names
continue
}
f := toFileInfo(name, d.FileAttributes, d.FileSizeHigh, d.FileSizeLow, d.CreationTime, d.LastAccessTime, d.LastWriteTime)
n--
fi = append(fi, f)
}
if !wantAll && len(fi) == 0 {
return fi, io.EOF
}
return fi, nil
}
示例4: Readdir
// Readdir reads the contents of the directory associated with file and
// returns an array of up to count FileInfo structures, as would be returned
// by Stat, in directory order. Subsequent calls on the same file will yield
// further FileInfos.
// A negative count means to read until EOF.
// Readdir returns the array and an Error, if any.
func (file *File) Readdir(count int) (fi []FileInfo, err Error) {
di := file.dirinfo
size := count
if size < 0 {
size = 100
}
fi = make([]FileInfo, 0, size) // Empty with room to grow.
for count != 0 {
if di.usefirststat {
di.usefirststat = false
} else {
_, e := syscall.FindNextFile(int32(file.fd), &di.stat.Windata)
if e != 0 {
if e == syscall.ERROR_NO_MORE_FILES {
break
} else {
return nil, &PathError{"FindNextFile", file.name, Errno(e)}
}
}
}
var f FileInfo
fileInfoFromWin32finddata(&f, &di.stat.Windata)
if f.Name == "." || f.Name == ".." { // Useless names
continue
}
count--
if len(fi) == cap(fi) {
nfi := make([]FileInfo, len(fi), 2*len(fi))
for i := 0; i < len(fi); i++ {
nfi[i] = fi[i]
}
fi = nfi
}
fi = fi[0 : len(fi)+1]
fi[len(fi)-1] = f
}
return fi, nil
}
示例5: findNext
func (this *FileInfo) findNext() error {
return syscall.FindNextFile(this.handle, &this.data1)
}