跨平台的方式来检测符号链接连接点?

跨平台的方式来检测符号链接连接点?,第1张

概述跨平台的方式来检测符号链接/连接点

在java中,Unix环境中的符号链接可以通过比较文件的规范path和绝对path来检测。 但是,这个技巧在windows上不起作用。 如果我执行

mkdir c:foo mklink /jc:bar

从命令行,然后在java中执行以下行

file f = new file("C:/bar"); System.out.println(f.getabsolutePath()); System.out.println(f.getCanonicalPath());

输出是

C:bar C:bar

是否有任何检测windows中的连接点的Java 7以前的方式?

我如何制作一个Java跨平台的GUI应用程序(windows,linux)? 我应该使用什么工具?

当某人提交非法文件名的文件时更新一个颠覆的工作副本

你如何从远程机器获得IP地址?

编译并运行跨平台的testing环境

跨平台的build议AndroID / iOS / windows

如何处理交叉平台C库中的Unicodepath?

在纯C中replace链接器部分

重命名函数vs undef:与windows API冲突

如何在Netbeans中创build一个跨平台的C ++应用程序?

将64位和32位版本的应用程序转换为相同的二进制文件?

在Java 6或更早的版本中似乎没有任何跨平台的机制,尽管它使用JNA是一个相当简单的任务

interface coreel32 extends library { public int GetfileAttributesW(WString filename); } static coreel32 lib = null; public static int getWin32fileAttributes(file f) throws IOException { if (lib == null) { synchronized (coreel32.class) { lib = (coreel32) Native.loadlibrary("kernel32",coreel32.class); } } return lib.GetfileAttributesW(new WString(f.getCanonicalPath())); } public static boolean isJunctionorSymlink(file f) throws IOException { if (!f.exists()) { return false; } int attributes = getWin32fileAttributes(f); if (-1 == attributes) { return false; } return ((0x400 & attributes) != 0); }

编辑:更新每个评论关于可能的错误返回由getWin32fileAttributes()

答案是不'。 连接点和符号链接是不一样的事情。 JRE不检查它们,所以你引用的函数不能区分它们。

说完这个,你可以用下面的方法来完成一些事情:

如果联结的目录有内容,那么得到标准路径名的结果可能是“令人惊讶的”,并且显示出情况,因为它可能是联结目标下的路径名。 这只有在结点指向的目录非空时才有效。

你可以尝试这个肮脏的黑客入侵窗户

if (f.isDirectory() || f.isfile()) { System.out.println("file or Directory"); } else { System.out.println("link"); }

总结

以上是内存溢出为你收集整理的跨平台的方式来检测符号链接/连接点?全部内容,希望文章能够帮你解决跨平台的方式来检测符号链接/连接点?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1280916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存