golang遍历FTP文件夹

package ftp

import (
	"fmt"

	"github.com/jlaffaye/ftp"
)

//SourceManager ...
type SourceManager struct {
	conn *ftp.ServerConn
}

// EntryHandler 遍历ftp目录时的文件handler
// EntryHandler ...
type EntryHandler func(e *ftp.Entry, currentPath string) error

// Source FTP 文件对象
type Source struct {
	// ftp库的entry对象
	entry *ftp.Entry
	// 文件的全路径+文件名
	path string
}

// 遍历ftp目录,获取文件
func (m *SourceManager) walk(rootDir string, handler EntryHandler) error {
	entries, err := m.conn.List(rootDir)
	if err != nil {
		return err
	}
	for _, entry := range entries {
		if entry.Name == "DVRWorkDirectory" {
			continue
		}
		switch entry.Type {
		case ftp.EntryTypeFile:
			handler(entry, rootDir)
		case ftp.EntryTypeFolder:
			m.walk(fmt.Sprintf("%s/%s", rootDir, entry.Name), handler)
		default:
		}
	}
	return nil
}

func (m *SourceManager) listfiles(rootDir string) ([]*Source, error) {
	sources := []*Source{}
	err := m.walk(rootDir, func(entry *ftp.Entry, currentPath string) error {
		sources = append(sources, &Source{
			entry: entry,
			path:  fmt.Sprintf("%s/%s", currentPath, entry.Name),
		})
		return nil
	})
	if err != nil {
		return nil, err
	}
	return sources, nil
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值