filepath.Join删除点

时间:2018-08-03 09:28:11

标签: go filepath

我对rsync的创建路径有问题。

x := filepath.Join("home", "my_name", "need_folder", ".")
fmt.Println(x)

我得到"home/my_name/need_folder",但需要"home/my_name/need_folder/.",如果没有concat,如何解决?在名称为“。”的linux文件夹中。并非不可能。

谢谢!

2 个答案:

答案 0 :(得分:4)

您无法使用filepath.Join()作为其文档说明:

  

加入通话以清除结果...

并且由于.表示“当前”目录,因此它将被filepath.Clean()删除:

  

它反复应用以下规则,直到无法进行进一步处理为止:

     
      
  1. [...]

  2.   
  3. 消除每个。路径名元素(当前目录)。

  4.   

实际上,path/filepath包根本无法做您想做的事,不支持此操作。

您需要手动使用字符串连接。为此使用filepath.Separator会很安全:

x := filepath.Join("home", "my_name", "need_folder") +
    string(filepath.Separator) + "."
fmt.Println(x)

输出(在Go Playground上尝试):

home/my_name/need_folder/.

答案 1 :(得分:0)

调用文件路径时,加入实际上有两个步骤

  1. 用分隔符连接路径,实际上,通过此步骤,您将获得“ home / my_name / need_folder /”。
  2. 清理路径,这将对path进行词法处理,并返回与您在步骤1中获得的path相同的最短路径名。

在步骤2中,如果您阅读源代码,则会调用Clean函数,并且该函数将

  

消除每个。路径名元素(当前目录)。

您可以尝试:

x := filepath.Join("home", "my_name", "need_folder", ".", "." , ".") fmt.Println(x)

您仍然会得到相同的结果。

如果建议您在这种情况下使用concat:)