1

サブステッドドライブ (Windows 上) で呼び出すFiles.getFileStore()と、次のエラーが発生します。

The directory is not a subdirectory of the root directory

たとえば、次のようにします。

subst P: C:\temp

ランニング:

public static void main(String[] args) throws IOException {
    final Path dir = Paths.get("P:/sub");
    final FileStore fileStore = Files.getFileStore(dir);
    fileStore.isReadOnly();
}

結果:

Exception in thread "main" java.nio.file.FileSystemException: P:\sub: The directory is not a subdirectory of the root directory.

    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsFileStore.create(WindowsFileStore.java:92)
    at sun.nio.fs.WindowsFileSystemProvider.getFileStore(WindowsFileSystemProvider.java:482)
    at java.nio.file.Files.getFileStore(Files.java:1411)
    at utils.FileStoreMain.main(FileStoreMain.java:16)

FileStoreこの問題を解決し、適切なを受け取るにはどうすればよいP:ですか?

4

2 に答える 2

2

このバグレポートJDK-8034057とAlan Batemanからの関連する回答をご覧ください。

于 2015-11-26T17:37:06.983 に答える
0

問題は、「substed ドライブ」がファイル ストアではないことです。ドライブ文字を既存のドライブのパスに関連付けるだけです。

あなたがした:

subst p: c:\temp

実際、これは、実際のファイルストアがp:\subc: に関連付けられたドライブであることを意味します。

注: これは単なる仮説です。実際に Windows を実行しているわけではありません。しかし、ファイルストアを反復しようとすると (つまり、インスタンスを呼び出すことによって.getFileSystem().getFileStores()) Path、P: は表示されません。

ここで、可能であれば実際のファイルストアを取得する方法について疑問が残ります。FileAttributeViewこの情報を提供できる が存在する可能性があります。次のコードを使用して、使用可能な属性ビューとそのパラメーターを試してみてください。

// using some Path instance named path...
final FileSystem fs = path.getFileSystem();
final Set<String> viewNames = fs.supportedFileAttributesView();

for (final String viewName: viewNames) {
    System.out.println("View " + viewName + ':');
    System.out.println(Files.readAttributes(path, viewName + ":*"));
}

探している情報を含むビューが存在する可能性があります...ただし、保証はありません。

于 2015-11-26T14:28:53.660 に答える