[八卦] 发现tango一个bug
tomqyp
2008-10-31
发现只要路径中包函“-”字符,tango处理时就会产生异常。
我英文不好,英文不错的朋友可不可以顺手报告一下。 import tango.io.FilePath; void main() { new FilePath(r"E:\gdb-6.8"); } |
|
tomqyp
2008-10-31
找到原因了,原来不在于“-”字符,而是"\"字符引起的
version (Win32) { enum : char { CurrentDirChar = '.', FileSeparatorChar = '.', PathSeparatorChar = '/', SystemPathChar = ';', } static const char[] ParentDirString = ".."; static const char[] CurrentDirString = "."; static const char[] FileSeparatorString = "."; static const char[] PathSeparatorString = "/"; static const char[] SystemPathString = ";"; static const char[] NewlineString = "\r\n"; } package PathParser parse (char[] path, uint end) { ............ for (int i=end_; --i >= 0;) switch (fp[i]) { case FileConst.FileSeparatorChar: if (name_ < 0) if (suffix_ < 0 && i && fp[i-1] != '.') suffix_ = i; break; case FileConst.PathSeparatorChar: if (name_ < 0) name_ = i + 1; break; case '\\': throw new IOException ("unexpected '\\' character in path: "~path); version (Win32) { case ':': folder_ = i + 1; break; } default: break; } ............... } 奇怪的是windows下 目录分隔符也定义为'/',tango难到也会犯这样的底级错误? |
|
tomqyp
2008-10-31
tango的版本是0.99.7
试了一下把这两处改一下,重新编译一下tango就OK了 |
|
oldrev
2008-11-01
人家代码里写明了不允许 \
throw new IOException ("unexpected '\\' character in path: "~path); 这个不能算是 bug 吧? |
|
tomqyp
2008-11-01
是啊不允许,但是在win32下\是目录分隔符啊,你看它的win32版的声明,目录分隔符却是/。
其实试一下就知道,win32下不管FilePath()用什么windows路径初始化都会引发异常。 |
|
tomqyp
2008-11-01
刚才在xp下试了一下,原来\和/都可以做分隔符。
比如用C:\windws\system32和C:/windws/system32,都可以正常操作。 但是windows api甚至tango的许多io函数在windows下返值都是默认用\做分隔符,所以把\定为非法肯定会出错了。 |
|
oldrev
2008-11-01
还是去问问开发者比较好
|
|
tomqyp
2008-11-03
下了svn里最近的版本,发现问题已经发现并解决了。
tango的做法是在FilePath初始化时在构造函数中将中路径转换成统一格式。 另外tango0.99.8好像快要发布了 |