一會 C:\User
一會C:\\User
一會 C:/User
改得我腦門疼,水平有限,精力不夠最終還是放棄 Windows
1
flynaj 2018-10-27 21:13:17 +08:00 via Android
相对目录
|
3
serical 2018-10-27 21:18:25 +08:00 via Android
做成配置文件的方式,不同系统配置不同的
|
4
liaohongxing 2018-10-27 21:21:11 +08:00 3
一般跨平台语言都有提供 路径分隔符 标志 如 java 的 File.separator,php 的 DIRECTORY_SEPARATOR 常量 ,写跨平台程序路径肯定要用 这些 标志来拼接 ,否则肯定有路径问题。
|
5
loading 2018-10-27 21:22:10 +08:00 via Android
这个路径分隔符能在程序启动时获取存到一个常量里吧。
我忘了我这样处理的程序是 python 还是 golang 了。 |
7
zjsxwc OP @liaohongxing
@loading 這些只是其中之一的問題,我還要把涉及的自動生成的 shell 腳本轉化爲 bat 腳本,工作量有點大改了一晚上碰到各種坑,有幾個三方包里面還碰到用到不支持 windows 的 syscall,我剛開始還想把這些 syscall 改兼容,改了半天還是各種坑不斷出現,反正我放棄里!!!! |
8
watzds 2018-10-27 21:34:27 +08:00 via Android
这和 go 没啥关系, `\\` `\` `/`其他语言也差不多,一个转义,两个不同分隔符
|
9
iwtbauh 2018-10-27 21:46:16 +08:00 via Android 1
@zjsxwc #7
msys2 了解一下?用 msys2 移植可以简化绝大部分的工作量 shell 脚本直接跑。 msys2 实现了 posix API (不要用 msys2 带的 mingw,那个没有 posix 支持) 包括 GTK+等程序都可以无痛移植 |
10
BBCCBB 2018-10-27 21:46:32 +08:00
filepath. ToSlash()
|
11
junjieyuanxiling 2018-10-27 21:55:04 +08:00 via Android
@loading Python 有 os.sep 。
|
12
kidlj 2018-10-27 23:40:18 +08:00 via iPhone
标准库里的 log/syslog 才牛逼,Windows 上怎么编译都报错 undefined,后来一查 stackoverflow,不支持 Windows。那你还放到标准库里?
|
13
Trim21 2018-10-28 02:06:29 +08:00 via Android 5
今天写 golang 用到 path.IsAbs,发现 Windows 下的路径怎么传结果都是 false,看了一眼源码,就判断了字符串第一个字符是不是“/”…
|
15
zwh2698 2018-10-28 06:46:49 +08:00 via Android
路径前缀,你可以配置,也可以 api 获取,/ Windows 兼容所以不用改
|
16
zealzz 2018-10-28 06:55:11 +08:00 via Android
兄弟,join 方法了解一下了,既然语言做到了跨平台,就肯定会处理这些差异啊。手动拼路径是一件多么傻的是啊。
|
18
yulon 2018-10-28 08:56:40 +08:00
Go 不是有 filepath 包吗,任何语言在标准库支持处理路径的情况下都不要手写路径分隔符,JS 也是同理啊。。。
|
21
SuperMild 2018-10-28 10:25:37 +08:00
@ #13
文档概述一共就两三句话也不看吗。涉及系统路径的 api,第一反应就是可能不跨平台需要看文档确认一下。另外上面有人说不跨平台就不能入标准库,是不是各种语言标准库了解得太少,不跨平台很正常的。 Package path This package does not deal with Windows paths with drive letters or backslashes; to manipulate operating system paths, use the path/filepath package. |
22
Cbdy 2018-10-28 10:31:07 +08:00 via Android
Go 难道没有类似 Java 的 File、Path 这样的 API 吗?
|
23
jhdxr 2018-10-28 10:36:27 +08:00
@SuperMild 恕我孤陋寡闻,我想了一下,java / php / python / nodejs 之类的涉及到路径的 api,好像都是可以跨平台的吧? go 用户有时候最好跳出井看一眼现在外面的世界是啥样了。。。
|
24
feverzsj 2018-10-28 10:43:02 +08:00
别人跨平台用 go 都很顺,只能说是 lz 自己的问题
|
26
SuperMild 2018-10-28 11:13:42 +08:00
|
27
congeec 2018-10-28 11:14:20 +08:00 via iPhone
#8 正解 现代语言里基本都有 raw string 吧
|
28
aru 2018-10-28 11:16:38 +08:00
windows 7 以上可以用 c://windows/system32/ 这样的路径表示方式
|
32
reus 2018-10-28 11:29:30 +08:00 1
@jhdxr go 标准库有跨平台的路径处理包,他给出的文档里都写了“ to manipulate operating system paths, use the path/filepath package.”,你连读都不读,就敢叫人“跳出井口”?难道不是你自己的问题???
|
33
rrfeng 2018-10-28 12:15:31 +08:00
import "path/filepath"
|
34
Kisesy 2018-10-28 12:41:21 +08:00
奇怪的问题,事实上我这里这样写都是正常的
path := "c://aaa/abc\\cde/////xxx\\\\aaa" os.MkdirAll(path, 0666) os.Create(filepath.Join(path, "a.txt")) |
35
liuxey 2018-10-28 12:41:45 +08:00
其实现在不用管正反,一律用“/”,反正兼容
|
38
cpdyj0 2018-10-28 13:55:40 +08:00
标准库不会自动处理这些问题吗,我记得 Java 好像是可以的
|
39
Kisesy 2018-10-28 14:45:12 +08:00 1
@hansnow 是的,但是 Join 会默认调用 Clean,会格式化为 c:\aaa\abc\cde\xxx\aaa\a.txt ,这样就不能证明系统或者编程语言其实是支持混乱的分隔符的了
|
40
raptor 2018-10-28 16:00:52 +08:00
还是那句话,珍爱生命,远离微软
|
41
ps1aniuge 2018-10-28 20:33:02 +08:00
楼主开发 win,linux,mac 通用的命令行程序,我建议用 powershell。
powershell 有 join-path 命令。 问:powershell 如何合并目录,文件? 答: join-path linux 中 $a = '/root' $b = 'abc.txt' $c = join-path -Path $a -ChildPath $b $c #/root/abc.txt win 中 $a = 'e:\temp8' $b = 'abc.txt' $c = join-path -Path $a -ChildPath $b $c #e:\temp8\abc.txt 我帮楼主解决问题,也希望楼主能帮我解决问题。 我的问题是: 光棍节,把你的购物车,中的商品,推荐给我,我不知买啥好。 珍爱生命,远离 bat,bash。这 2 货 很多年基本不更新了。 多用 powershell 这把屠龙刀。 |
42
CharlieBrown 2018-10-29 10:14:09 +08:00
python 中有 os.sep
|