使用子目录时go lang中的文件夹和文件访问不起作用

时间:2015-01-22 18:00:09

标签: csv go directory

我上周开始使用Go。我一直在为csv文件做一个小的导入应用程序,现在我正在努力处理Go处理目录和文件的读取权限。

我想要做的是阅读文件夹,搜索csv文件并保存每个csv文件的内容,以便我可以通过http请求发送每个文件的内容。

这是我的代码:

func GetFileContent(fileName string) ([][]string, error) {
  file, err := os.Open(fileName)
  if err != nil {
    log.Println("There was an error:", err)
    return nil, err
  }

  defer file.Close()
  reader := csv.NewReader(file)
  reader.FieldsPerRecord = -1
  csvFileContent, err := reader.ReadAll()
  if err != nil {
    log.Println("There was an error:", err)
    return nil, err
  }
  return csvFileContent, nil
}

func GetFiles(importPath string, fileExtension string) ([]string, error) {

  var result []string

  directory, err := os.Open(importPath)
  if err != nil {
    return result, err
  }
  defer directory.Close()

  files, err := directory.Readdir(-1)
  if err != nil {
    return result, err
  }

  for _, file := range files {
    if file.Mode().IsRegular() {
      if filepath.Ext(file.Name()) == "." + fileExtension {
        log.Println("Import Files: ", file.Name())
        result = append(result, file.Name())
      }
    }
  }
  if len(result) == 0 {
    log.Println("No import files of type " + fileExtension + " found.")
    log.Println("Import skipped.")
  }
  return result, nil
}

知道为什么我仍然分别找不到文件错误:打开:当我不使用我的应用程序的根文件夹/工作目录而是另一个(父)文件夹时,没有这样的文件或目录? 只要我使用./作为源文件夹,它就可以工作。

这可以通过一些小改动来解决,还是我必须使用另一个包和/或功能?

2 个答案:

答案 0 :(得分:4)

FileInfo.Name返回文件的基本名称。您需要使用基本名称join目录名来获取文件路径。

在GetFiles中更改此行

result = append(result, file.Name())

result = append(result, filepath.Join(importPath, file.Name()))

答案 1 :(得分:3)

在这种情况下,您可以考虑使用更高级别的filepath.Glob()

files, err := filepath.Glob(filepath.Join(importPath, "*.csv"))