go语言学习-文件操作 path path/filepath

文件操作

在 Linux 中,路径的格式为/user/bin 路径中的分隔符是/; Windos 中的路径格式 为C:\Windows路径中的分隔符是\。 而**在Go中,只认'/' **。

path 路径

1.func Base(path string) string 返回路径的最后一部分。

fmt.Println(path.Base("/usr/bin"))  //bin
fmt.Println(path.Base("")) //输出.
fmt.Println(path.Base("C:\\Windows"))/*无法识别Windows下的路径分隔符, 将会把C:\\Windows做为一个路径 * /
fmt.Println(path.Base(strings.Replace("C:\\Windows", "\\", "/", -1))) /*把\转换成/*/

2.func Clean(path string) string 返回一个跟 path 等价的短路径。一般在路径中出现./或../时 可以使用本函数,返回一个等价的路径

fmt.Println(path.Clean("/a/b/../c")) /*/a/c*/
fmt.Println(path.Clean("/a/b/../././c")) /*/a/c*/

3.func Dir(path string) string 返回路径中的目录部分。也就是最后一个/前面的部分。

fmt.Println(path.Dir("/a/b/../c/d/e")) /*/a/c/d*/
fmt.Println(path.Dir("/a/b/"))       /*/a/b*/

4.func Ext(path string) string 用来取文件的扩展名。

fmt.Println(path.Ext("/a/b/../c/d./e")) /*没有扩展名*/
fmt.Println(path.Ext("/a/b/test.txt"))  /*.txt*/

5.func IsAbs(path string) bool 用来判断路径是否绝对路径。在 Linux 下如果路径是以/开头 的是绝对路径,如/user/bin,否则是相对路径;Windows 下,以盘符开头的是绝对路径,如 C:\Windows\system,而 Windows\system 是相对路径

fmt.Println(path.IsAbs("/a/b/c"))
fmt.Println(path.IsAbs(strings.Replace("C:\\Windows\\system", "\\", "/", -1))) /*Go 只识别/所以需要转换一下*/

第一个输出 true,/a/b/c 是绝对路径;第二个输出 false.
C:\Windows\system 是绝对路径,但 Go 好像只支持 Linux 格式的路径,所以此处判断错误

6.func Join(elem ...string) string,用来进行路径的连接。如将 a/b,和 c 连接成 a/b/c。

fmt.Println(path.Join("a/b", "c"))/*a/b/c*/
fmt.Println(path.Join("C:\\Windows", "System"))/*C:\Windows/System*/

7.func Split(path string) (dir, file string)把路径分割成目录和文件两部分。

fmt.Println(path.Split("/a/b/test.txt")) /*/a/b/ test.txt*/
fmt.Println(path.Split("/a/b/c/"))       /*/a/b/c/ */
fmt.Println(path.Split("/a/b/c"))       /*/a/b/   c */

filepath

1.func Abs(path string) (string, error)用来把相对路径转换成绝对路径,该函数位于 path/filepath 包中

fmt.Println(filepath.Abs(".")) /*当前文件所在目录*/

2.func Walk(root string, walkFn WalkFunc) error,用来遍历 root 目录下的所有文件和子目录。

//WalkFunc 是一个函数类型,定为 type WalkFunc func(path string, info os.FileInfo, err error) error,path 为当前文件或文件侠的完整路径,info 是 os.FileInfo 结构的表示


package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func DispFile(path string, info os.FileInfo, err error) error {
	fmt.Println(path, "-------", info.Name(), "------", info.IsDir())
	return nil
}
func main() {
	filepath.Walk(".", DispFile)
}


转载于:https://my.oschina.net/solate/blog/719188

<think>好的,我现在需要回答用户关于Go语言中path/filepath包的filepath.Join函数用法的问题。用户还希望有一个示例,并且按照系统级指令来格式化回答,同时生成相关问题。 首先,我需要回忆一下filepath.Join的基本作用。这个函数是用来拼接文件路径的,它会自动处理不同操作系统中的路径分隔符,比如在Windows中用反斜杠,而Linux/macOS用正斜杠。同时,它还能处理多余的斜杠和相对路径的问题,比如"../"这样的部分。 接下来,我需要确保回答的结构符合用户的要求。用户需要结构清晰,分步骤解释,并且保证真实可靠。因此,我应该先介绍函数的基本功能,然后说明它的参数和返回值,再给出一个或多个示例代码,展示不同情况下的使用方式,比如处理多个路径元素、空字符串、绝对路径等。 然后,我需要检查是否需要引用站内的内容。根据用户提供的引用,引用[1]和引用[2]是关于文件发送和安全启动的内容,似乎和filepath.Join无关,所以可能不需要引用。但需要确认是否有相关的地方可以引用。看起来可能不需要,但需要确保在回答中如果有引用的话要正确标注。 接下来,编写示例代码。例如,使用filepath.Join("dir", "subdir", "file.txt")会生成"dir/subdir/file.txt"(在Linux下)。还要注意处理绝对路径的情况,比如如果其中一个参数是绝对路径,Join会忽略之前的路径,比如filepath.Join("/usr", "/local", "bin")会变成"/local/bin"。 然后,用户可能需要知道不同操作系统下的表现差异,比如在Windows下会使用反斜杠,但Join会自动处理,所以代码示例中应该体现这一点,但实际运行结果会根据系统不同而变化,所以可能需要说明这一点。 另外,需要提到Join函数会清理路径,比如处理多余的斜杠和"."、"..",例如filepath.Join("a//", "../b", "c")可能会变成"b/c",不过实际结果可能取决于具体路径结构,可能需要具体测试。 现在,生成相关问题。根据这个函数的用途,相关问题可能包括:如何处理不同操作系统的路径分隔符?Join函数如何处理绝对路径和相对路径?有没有其他相关的函数,比如filepath.Clean?或者比较Join和字符串拼接的区别,以及路径清理的注意事项。 最后,确保所有的数学公式或代码块都正确使用$...$或```格式,但在这个问题中主要是代码示例,所以需要用代码块包裹Go代码,并正确显示。同时,回答要使用中文,结构清晰,分点说明。</think>在Go语言中,`filepath.Join` 是 `path/filepath` 包提供的路径拼接函数,它能自动处理不同操作系统的路径分隔符,并优化路径结构。以下为详细说明及示例: --- ### 核心功能 1. **跨平台路径拼接** 根据操作系统自动选择 `/`(Linux/macOS)或 `\`(Windows)作为分隔符。 2. **清理冗余字符** 自动处理多余的斜杠(如 `//`)、当前目录(`.`)和父目录(`..`)。 3. **处理绝对路径** 若参数中包含绝对路径,则忽略之前的所有路径元素。例如: `filepath.Join("a", "/b", "c")` 在Linux中返回 `/b/c`。 --- ### 函数签名 ```go func Join(elem ...string) string ``` - **参数**:可变长度的字符串参数,表示路径元素。 - **返回值**:拼接后的规范化路径。 --- ### 使用示例 #### 示例1:基础拼接 ```go package main import ( "fmt" "path/filepath" ) func main() { path := filepath.Join("dir", "subdir", "file.txt") fmt.Println(path) // Linux/macOS输出: dir/subdir/file.txt // Windows输出: dir\subdir\file.txt } ``` #### 示例2:处理空字符串与绝对路径 ```go path := filepath.Join("", "/usr", "local", "bin") fmt.Println(path) // 输出(Linux): /usr/local/bin // 解释:空字符串被忽略,绝对路径 `/usr` 重置起始点 ``` #### 示例3:清理冗余符号 ```go path := filepath.Join("a//", "../b", "c/./d") fmt.Println(path) // 输出(Linux): b/c/d // 解释:`a//` 被规范化为 `a`,`../b` 退到上级目录,`c/./d` 移除 `.` ``` --- ### 注意事项 1. **避免手动拼接路径** 直接使用字符串拼接(如 `a + "/" + b`)可能导致跨平台问题,优先使用 `Join`。 2. **路径规范化** 若需进一步清理路径(如解析 `..`),可结合 `filepath.Clean()` 使用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值