★★Java質問・相談スレッド148★★
■ このスレッドは過去ログ倉庫に格納されています
0394デフォルトの名無しさん
2011/10/02(日) 01:20:20.24public void list(File file) {
fileがディレクトリなら list(file.listFiles())で再帰。
fileがファイルならファイル名をArrayListに追加。
}
うまくいかないのは、下位のディレクトリを再帰的にみていくときに、上のディレクトリに戻ってきてしまうハードリンクがあるためです。
2つのHDDが C:\、D:\ になっているのですが、
Dドライブは C:\HDD\D というパスからも見れるようにドライブパスを設定しており、
Cドライブからは、D:\HDD\C というパスからも見れるようにドライブパスが設定してある状況だと、
C:\HDD\D\HDD\C\HDD\D\HDD ・・・
というように循環してしまいます。
UNIX環境下のシンボリックリンクやハードリンクのループのようなものだと思い
JDK7 出導入された java.nio.file.Files のシンボリックリンクのチェック(ttp://download.oracle.com/javase/tutorial/essential/io/links.html) や
JDK6 でできる ttp://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links
の方法を試したのですが C:\HDD\D = D:\ということを検出できず、循環を防げませんでした。
何かいい方法はないでしょうか。
環境は Windows 7、JDK7です。
■ このスレッドは過去ログ倉庫に格納されています