files, _ := ioutil.ReadDir(path)->循环打印files没有问题
os.Rename(old,new)->单独执行也正常修改了文件名(os.Rename好像是复制操作)
然后对files执行range批量修改名称时出现了问题.大概只循环了3-4次就退出了.并且没有报错.goland提示Process finished with exit code 0表示正常退出.起初怀疑是复制没完成导致主线程提前退出.最末尾追加了 time.Sleep(time.Hour*1).依然提示Process finished with exit code 0正常退出!!休眠竟然被忽略了,请经历过的人指教下问题出现在哪??
大致代码如下
`files, _ := ioutil.ReadDir(path)`
`for i := 0; i < len(files); i++ {`
` fmt.Println(files[i].Name())`
` split := strings.Split(files[i].Name(), ".")`
` os.Rename(path+"/"+files[i].Name(), "D:/rename/"+strconv.Itoa(i)+"."+split[1])`
`}`
在stackoverflow找到同样的问题:https://stackoverflow.com/questions/56075774/golang-os-renamefromdir-todir-not-working-in-windows# 但是没 解决方案....
```go
虽然在我的电脑上试了上述程序没问题,大概因为我没有用C盘吧。
不过我还是怀疑files, err := ioutil.ReadDir(source)占用着文件导致rename失败,因为源文件被占用了啊
所以我猜你用下面的方法得到文件名列表就行,因为在下面函数的files是局部变量,返回后就释放占用
你可以试试,我也只是猜测而已。
func readFiles(source string) ([]string, error) {
files, err := ioutil.ReadDir(source)
if err != nil {
return nil, err
}
fName := make([]string, 0, len(files))
for _, f := range files {
fName = append(fName, f.Name())
}
return fName, nil
}
```
#6
更多评论