确定文件是否是内容索引(在Windows中)?

时间:2015-10-12 10:42:24

标签: java windows winapi

Java问题。

我应该使用什么方法来确定Windows文件是否标记为已编入索引的内容?我试图为Determine whether a file is a junction (in Windows) or not?写一个解决方案similair,我想强调的是,下面的代码只是假设.getClass()。getDeclaredMethod方法确实有" isIndexed"作为一个参数,符合" isReparsePoint"但是,这个假设结果是不正确的,因为下面的代码总是返回false。我决定留下它以防万一有人知道适合此代码的适当参考。

boolean isIndexed = false;
if (DosFileAttributes.class.isInstance(attr)) {
    try {
         Method m = attr.getClass().getDeclaredMethod("isIndexed");
         m.setAccessible(true);
         isIndexed = (boolean) m.invoke(attr);
    } catch (Exception e) {
         // just gave it a try
    }
}

而不是" isIndexed"在getDeclaredMethod参数中,我也尝试过使用" isContentIndexed"并且" isNotContentIndexed",都没有任何令人满意的结果。

1 个答案:

答案 0 :(得分:0)

sun.nio.fs.WindowsFileAttributes类没有任何方法来报告文件是否内容索引。但是,您可以调用attributes()方法来检索文件属性的基础位掩码,然后检查FILE_ATTRIBUTE_NOT_CONTENT_INDEXED(0x2000)属性位是否已设置:

boolean isIndexed = false;
if (DosFileAttributes.class.isInstance(attr)) {
    isIndexed = true;
    try {
         Method m = attr.getClass().getDeclaredMethod("attributes");
         m.setAccessible(true);
         int attrs = (int) m.invoke(attr);
         isIndexed = ((attrs & 0x2000) == 0);
    } catch (Exception e) {
         // just gave it a try
    }
}