使用子目录时如何修复文件访问?

How to fix file access when using a sub-directory?

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
}

Error: open : no such file or directory

当我不使用我的应用程序的根文件夹/工作目录而是另一个(父)文件夹时出现?只要我使用 ./ 作为源文件夹,它就可以工作。

FileInfo.Name returns the base name of the file. You need to join目录名加上基本名称得到文件路径

在 GetFiles 中更改此行

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

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

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

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