# Wechseldatenträger erkennen



## Gelöschtes Mitglied 9001 (24. Jun 2009)

Hallo,

ich suche eine Möglichkeit, unter Java 1.5 zu erkennen, ob es sich bei einem Datenträger um einen Wechseldatenträger handelt.
FileSystemView.getSystemTypeDescription liefert unter MacOS und Linux hierzu nichts Verwertbares, aber unter diesen Betriebssystemen kann ich durch Verwendung von Command-Line-Tools die Infos bekommen, die ich möchte.

Unter Windows liefert die Methode "Wechseldatenträger", was nur auf den ersten Blick hilfreich ist, denn meine Applikation läuft auch in nicht deutschsprachigen Regionen.

Gibt es mit Java noch andere Möglichkeiten oder gibt es unter Windows ein Command-Line-Tool, welches ich aufrufen und das Ergebnis parsen kann? (Kenne mich mit Windows nicht so aus.)

Vielen Dank für alle Tipps!
Rajmund


----------



## Gelöschtes Mitglied 9001 (2. Jul 2009)

Keiner eine Idee?


----------



## Marco13 (2. Jul 2009)

Leider nicht. Ich bin mir nicht mal sicher, ob das überhaupt theoretisch möglich ist - kann gut sein, dass man dazu (ggf. selbst) eine Native Bibliothek schreiben muss, die man dann über JNI anspricht...


----------



## Gelöschtes Mitglied 9001 (29. Nov 2009)

Ich hatte es dann tatsächlich nativ gelöst. Seit ich Java 1.6 benutze, gibt es aber offenbar mit dieser nativen Bibliothek ein Problem. Daher suche ich weiter nach Möglichkeiten, es mit Java allein zu lösen.


----------



## Marco13 (29. Nov 2009)

Vielleicht gibt es ja auch für das Problem mit der native Bibliothek eine Lösung  (Wie gesagt: Mit reinem Java seh' ich da nicht so viele Chancen ... lasse mich aber gerne eines besseren belehren)


----------



## Gelöschtes Mitglied 9001 (30. Nov 2009)

Naja, dazu muß ich den Fehler, den mir der User berichtete, erst einmal reproduzieren können. Das ist mir noch nicht gelungen. Mit Java 1.5 lief es offenbar, mit 1.6 nicht mehr. Auf meinem Windows XP-Testsystem allerdings läuft's auch mit 1.6.
(Die native Mini-Bibliothek heißt DriveInfo.dll)


```
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77376796, pid=856, tid=3884
#
# JRE version: 6.0_17-b04
# Java VM: Java HotSpot(TM) Client VM (14.3-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [ntdll.dll+0x66796]
#
# If you would like to submit a bug report, please visit:
#   [url=http://java.sun.com/webapps/bugreport/crash.jsp]HotSpot Virtual Machine Error Reporting Page[/url]
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

---------------  T H R E A D  ---------------

Current thread (0x3121b800):  JavaThread "Thread-10" daemon [_thread_in_native, id=3884, stack(0x2ffa0000,0x2fff0000)]

siginfo: ExceptionCode=0xc0000005, writing address 0x000001bf

Registers:
EAX=0x000001bf, EBX=0x63c2084b, ECX=0x813c8f97, EDX=0x0000813c
ESP=0x2ffefa78, EBP=0x2ffefaac, ESI=0x054a0878, EDI=0x63c20000
EIP=0x77376796, EFLAGS=0x00010282

Top of Stack: (sp=0x2ffefa78)
0x2ffefa78:   00000000 02180000 0092f118 0092f118
0x2ffefa88:   07bf03c8 f8c1084a 813c8505 2ffefdac
0x2ffefa98:   773199fa 000831ec 8be7d300 00000001
0x2ffefaa8:   0092f110 2ffefac0 773766ea 0092f118
0x2ffefab8:   3121b800 28549f08 2ffefad4 76659a26
0x2ffefac8:   02180000 00000000 0092f110 2ffefb1c
0x2ffefad8:   7c34218a 02180000 00000000 0092f118
0x2ffefae8:   3121b800 28549f08 28549f08 7ff9fbf8 

Instructions: (pc=0x77376796)
0x77376786:   c1 ea 10 0b df 0b c8 8b 06 c7 45 f8 01 00 00 00
0x77376796:   89 30 8b 45 e0 8b 55 e4 8d 7e 08 f0 0f c7 0f 3b 


Stack: [0x2ffa0000,0x2fff0000],  sp=0x2ffefa78,  free space=318k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [ntdll.dll+0x66796]
C  [ntdll.dll+0x666ea]
C  [kernel32.dll+0x49a26]
C  [msvcr71.dll+0x218a]
V  [jvm.dll+0xf35ef]
C  [DriveInfo.dll+0x16d3]
C  [DriveInfo.dll+0x11e5]
j  basics.DriveInfo.getDriveTypeWindowsNative(Ljava/lang/String;)I+0
```

Letztlich wäre mir eine reine Java-Lösung am liebsten....


----------

