Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet

learningbydoing

Aktives Mitglied
Hallo zusammen,

ich habe ein Programm, welches bei der Ausführung von einer CD nur einen Thread benutzen soll. Wenn es auf einer Festplatte ausgeführt wird, dann werden mehrere Threads verwendet.

Meine Frage:
Gibt es eine Möglichkeit zu überprüfen, ob sich das Programm auf einer CD also auf einem CD-Laufwerk befindet oder auf einer Festplatte?


Vielen Dank schon einmal im Voraus!😃
 
Platforumuebergreifend? Nein.

Platformspezifisch? Nicht wirklich.

Du musst den Kernel fragen welches Geraet hinter diesem Pfad liegt, da wuesste ich von keinem System wie das geht aber du musst auf jeden Fall den Kernel fragen. Alternativ kannst du nur raten, aber selbst das ist ganz schoen fehleranfaellig (D:? E:? Z:?, /media/? /mnt/?).
 
Platforumuebergreifend? Nein.

Platformspezifisch? Nicht wirklich.

Du musst den Kernel fragen welches Geraet hinter diesem Pfad liegt, da wuesste ich von keinem System wie das geht aber du musst auf jeden Fall den Kernel fragen. Alternativ kannst du nur raten, aber selbst das ist ganz schoen fehleranfaellig (D:? E:? Z:?, /media/? /mnt/?).
Genau das habe ich mir auch schon gedacht🙄. Es handelt sich um ein Windows Betriebssystem.
 
Kannst du einfach den Benutzer fragen beim starten? Vielleicht nicht direkt fragen, sondern etwas aussenherum formulieren wie "Programmausfuehrung optimieren fuer ... CD - Festplatte - SSD" oder so.
 
Wenn Dir die Informationen, die Java Dir da bereit stellt, nicht ausreichen sollten, dann kannst Du deutlich mehr Informationen bekommen mit Libraries wie z.B. oshi:

Bei OSHI gibt es auch ein Beispiel, wie Du Details zu einem FileStore von einem gegebenen Pfad bekommst:
 
Wenn Dir die Informationen, die Java Dir da bereit stellt, nicht ausreichen sollten, dann kannst Du deutlich mehr Informationen bekommen mit Libraries wie z.B. oshi:

Bei OSHI gibt es auch ein Beispiel, wie Du Details zu einem FileStore von einem gegebenen Pfad bekommst:
Oh das ist sehr gut zu wissen. Habe ich davor noch nicht von gehört😃👍
 
ich habe ein Programm, welches bei der Ausführung von einer CD nur einen Thread benutzen soll. Wenn es auf einer Festplatte ausgeführt wird, dann werden mehrere Threads verwendet.
Nur mal so...warum ist es dir so wichtig, nur einen Thread zu haben?
Der CPU ist es prinzipiell egal, ob die das Programm von der Festplatte, von einem CD-Laufwerk, von einem USB-Stick oder aud dem Netzwerk kommen. Dein Programm wird am Ende des Tages ja nicht von dort ausgeführt, von wo es geladen wurde, sondern im RAM.
 
Ne, das ist programmatisch ermitteln. Und nein, das sagtest du nicht bereits.

Nein, das ist raten. Ist D: ein CD-Laufwerk? E:? F:? M:? Z:? Ist der Pfad unter /media/ ein USB-Stick oder eine CD? Und ja, das sagte ich bereits.

Nur mal so...warum ist es dir so wichtig, nur einen Thread zu haben?

Grundsaetzlich sind CDs echt furchtbar wenn es um zufaelliges lesen geht. Ich kann mir gut vorstellen dass wenn hier die gesamte CD verarbeitet werden soll, dass dann eine Datei nach der anderen zu verarbeiten einfach schneller geht als wenn man das Laufwerk die ganze Zeit springen laesst zwischen den Dateien.
 
Ne, das ist programmatisch ermitteln. Und nein, das sagtest du nicht bereits.
Ja, der Pfad ist programmatisch ermittelt. Nur eben sagt der Pfad nichts aus zu dem physischen Datenträger.

Was ist /home/konrad/DatenDerCD für ein Medium?
- Ist das einfach ein Verzeichnis, in das ich die CD gemountet habe?
- Oder ist das auf der Festplatte und ich habe die Daten kopiert?
- Ist es ein Netzwerklaufwerk? Und wenn es Netzwerklaufwerk ist: Was ist es auf dem Server? Eine CD? Eine Festplatte?

Oder wenn es WIndows sein sollte:
Es ist d:\
Das sagt nun so wirklich gar nichts. Das kann ein CD Laufwerk sein (physikalisch). Das ein virtuelles CD Laufwerk sein (ISO gemountet). Das kann eine Partition auf der (internen) Festplatte sein. Oder ein USB Stick. Oder eine USB Festplatte, Oder ....

Du hast keine Chance, da etwas genaues zu sagen. Selbst wenn man mehr Informationen hat wie Dateisystem ist "udf" - das kriege ich auch auf Festplatte erzeugt Man kann evtl. auch Freie Bytes prüfen. Aber wenn die CD eine RW ist, dann hast Du da auch noch freien Speicherplatz.

Also das Thema ist - wie Robert schon sagte - sehr komplex und plattformübergreifend nicht wirklich lösbar. Mit dem Pfad alleine überhaupt nicht und selbst mit oshi oder so nicht wirklich gut. Aber Annäherungen könnten da schon vielversprechend sein, denn das Filesystem sagt z.B. schon viel aus.
 
Grundsaetzlich sind CDs echt furchtbar wenn es um zufaelliges lesen geht. Ich kann mir gut vorstellen dass wenn hier die gesamte CD verarbeitet werden soll, dass dann eine Datei nach der anderen zu verarbeiten einfach schneller geht als wenn man das Laufwerk die ganze Zeit springen laesst zwischen den Dateien.
Dann hätte er dasselbe Problem aber auch bei einer Festplatte. Je nach dem vielleicht nicht so stark ausgeprägt, aber er hätte es, mehrere Paralleloperationen auf einer HDD ziehen den Datendurchsatz auch nur runter.

Und wenn daß tatsächlich das Problem sein sollte, würde ich über andere Möglichkeiten nachdenken. Z.B. durch Probeläufe ermitteln, ob mehrere Dateien parallel einlesen insgesamt schneller geht, oder über das Verhältnis Anzahl/durchschnittliche Größe der Dateien, usw.
 
Dann hätte er dasselbe Problem aber auch bei einer Festplatte. Je nach dem vielleicht nicht so stark ausgeprägt, aber er hätte es, mehrere Paralleloperationen auf einer HDD ziehen den Datendurchsatz auch nur runter.

Ja, aber ich glaube es ist um einiges staerker ausgepraegt auf einer CD.

Z.B. durch Probeläufe ermitteln, ob mehrere Dateien parallel einlesen insgesamt schneller geht, oder über das Verhältnis Anzahl/durchschnittliche Größe der Dateien, usw.

Je nachdem wieviel gelesen wird, dauert der Probelauf vielleicht laenger als das tatsaechliche (parallele) lesen. Wenn du jetzt auf einer SSD einen Probelauf von 10 Sekunden machst, waerst du vielleicht sogar schon fertig in der Zeit. Wenn du auf der CD eine Probelauf amchst von 10 Sekunden, hast du die Zeit quasi verschwendet.

Freundliche Erinnerung, wir wissen gerade nichts ueber die Anforderungen und die Umgebung von @User12345564, die sind vielleicht darueber schon hinaus. Ja, ich weisz, wahrscheinlich nicht, aber ich hatte ja schon vorgeschlagen stattdessen zu fragen was gemacht werden soll.
 
Ja, aber ich glaube es ist um einiges staerker ausgepraegt auf einer CD.



Je nachdem wieviel gelesen wird, dauert der Probelauf vielleicht laenger als das tatsaechliche (parallele) lesen. Wenn du jetzt auf einer SSD einen Probelauf von 10 Sekunden machst, waerst du vielleicht sogar schon fertig in der Zeit. Wenn du auf der CD eine Probelauf amchst von 10 Sekunden, hast du die Zeit quasi verschwendet.

Freundliche Erinnerung, wir wissen gerade nichts ueber die Anforderungen und die Umgebung von @User12345564, die sind vielleicht darueber schon hinaus. Ja, ich weisz, wahrscheinlich nicht, aber ich hatte ja schon vorgeschlagen stattdessen zu fragen was gemacht werden soll.
Der Anwendungsfall wäre das Vergleichen von Checksummen. Also Hashwerten in meinem Fall. Die Methode wo ich gefunden habe, hilft doch nicht. Es muss natürlich auch in anderen Sprachen genauso erkannt werden. Aber so wie ich das ganze rausgelesen habe, ist es eher schwierig den Laufwerktyp (in meinem Fall Festplatte oder CD) zu ermitteln, auf dem das Programm liegt.
 

Zurück
Oben