Win10 下 subst 建立的虚拟磁盘分区 Java 程序无法访问

2019-07-27 21:19:38 +08:00
 rajab
如题。Win10 系统,OpenJDK 1.8.0_25,
使用 subst 命令在创建了一个虚拟磁盘,如
subst Z: D:\test
test 文件夹下有一个 1.txt 文件
资源管理器中可以看到 Z 盘,
使用一个简单的 Java 程序读取 Z:\1.txt ,报 IOException: 系统找不到指定的路径
接着:
File file = new File("Z:\\1.txt");
System.out.println(file.exists());
结果也是 false。
百思不得其解,之前虚拟的磁盘在 Win7 下 Java 程序是可以使用的啊,是 UAC 的锅吗?奇怪。
3710 次点击
所在节点    Java
11 条回复
celeron533
2019-07-27 22:30:05 +08:00
好像 win10 下的 subst 仅对当前用户有效。如果 java 运行在另一个用账号下,可能会发生这个问题。我好像一年前遇到过类似的问题,但记不清了。
rajab
2019-07-27 23:01:05 +08:00
@celeron533 目前系统上就有一个用户,好像 java 也不是以系统用户运行的
laminux29
2019-07-28 08:13:27 +08:00
subst 一堆 bug,别用。这种事情走稳妥的办法,花点钱,该买大盘买大盘,该重新分区就重新给 C 分个大区。
rajab
2019-07-28 08:36:21 +08:00
@laminux29 不是因为盘小,对于盘小我一般用 ntfs 的目录连接点或者其他链接形式 ,安利下 hardlink shell extension 特别好用。
用 subst 的目的是虚拟出一个驱动器,主要用来统一开发环境,项目有个目录需要上传写入和读取,统一配置 z:,开发和部署的时候,把目录
rajab
2019-07-28 08:38:38 +08:00
@laminux29
映射到 z 盘就好了,省得修改配置文件了。用户那边根据磁盘空间的情况部署时映射一个目录就行,写个批处理就搞定了。不好意思不小心按到回车分成两个回复了。
Cooky
2019-07-28 09:52:16 +08:00
用环境变量呗,环境变量能改还能针对每个程序设置,分区盘符改着可就麻烦咯
msg7086
2019-07-28 10:44:11 +08:00
subst 既不是创建分区也不是创建磁盘,而是创建一个虚拟驱动器号。
这东西始建于 1985 年,用途是在 DOS 下创建一个虚拟驱动器号,指向一个目录。

subst 主要是 DOS 时代的东西,创建出来的磁盘属于 DOS 设备,和 Windows 上的东西不见得就能和平相处。
在 20 年前就淘汰了,不能用还算挺正常的我觉得。
laminux29
2019-07-28 13:18:22 +08:00
@rajab 我是前几年研究这玩意,当时遇到各种失效、各种软件不支持的问题。

反正你觉得够用就好,只是如果要上生产,最好测测再用,避免踩雷。
realpg
2019-07-28 13:43:31 +08:00
要不 映射网络驱动器试试 弄本机共享 可以统一盼复
TobeyChang
2019-08-13 16:36:20 +08:00
@rajab 看到别人讲 subst 的映射关系并不是全局的,在非管理员权限下映射的盘符,其他权限下的程序是看不到该映射的
TobeyChang
2019-08-13 16:38:20 +08:00
@rajab 可以在管理员权限下映射一( win10 管理员权限在映射之后在我的电脑是看不到虚拟驱动器的)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586785

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX