Laden...

DriveInfo auslesen - Das Gerät ist nicht bereit

Erstellt von OrtnerPeter vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.243 Views
O
OrtnerPeter Themenstarter:in
2 Beiträge seit 2012
vor 10 Jahren
DriveInfo auslesen - Das Gerät ist nicht bereit

Hallo Leute, ich bräuchte mal bitte Eure Hilfe also ich bastle an einem Programm welches mit die Infos von LW ausgibt. Jetzt will ich das nur ein bestimmtes LW für das raufspielen von Daten verwendet werden darf. Wenn ich es mit dem LW Buchstaben( C, D, I usw) mache klappt es wenn ich jedoch den Namen des LW (Daten, Stick usw.) nehmen will klappt es nicht. Die Fehlermeldung lautet dann > Fehlermeldung:

"System.IO.IOException, {"Das Gerät ist nicht bereit.\r\n"}" kann mir bitte wer helfen.

Funktionierender Code:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Laufwerke_Ermitteln
{
    class Program
    {
        static void Main(string[] args)
        {
            DriveInfo[] allDrives = DriveInfo.GetDrives();

            foreach (DriveInfo d in allDrives)
            {
                Console.WriteLine("Drive {0}", d.Name);
                //Console.WriteLine(" File type: {0}", d.DriveType);
                if (d.IsReady == true)
                {
                    Console.WriteLine(" Volume label: {0}", d.VolumeLabel);
                    Console.WriteLine(" File system: {0}", d.DriveFormat);
                    Console.WriteLine(" Available space to current user:{0, 15} bytes", d.AvailableFreeSpace);
                    Console.WriteLine(" Total available space: {0, 15} bytes", d.TotalFreeSpace);

                    Console.WriteLine(" Total size of drive: {0, 15} bytes ", d.TotalSize);
                }
                string LWName = d.Name;
                string erlaubt = "I";
                if (string.Compare(LWName, erlaubt) == 1)
                {
                    Console.WriteLine("Der Datenträger mit dem LW Buchstaben:" + " {0}", d.Name + " ist für den Datenexport zugelassen !");
                }
                else
                {
                    Console.WriteLine("Der Datenträger mit dem LW Buchstaben: " + d.Name + " ist für einen Export nicht zugelassen !");
                }    
            }
            Console.ReadKey();
        }
    }
}

Nicht Funktionierender Code:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Laufwerke_Ermitteln
{
    class Program
    {
        static void Main(string[] args)
        {
            DriveInfo[] allDrives = DriveInfo.GetDrives();

            foreach (DriveInfo d in allDrives)
            {
                Console.WriteLine("Drive {0}", d.Name);
                //Console.WriteLine(" File type: {0}", d.DriveType);
                if (d.IsReady == true)
                {
                    Console.WriteLine(" Volume label: {0}", d.VolumeLabel);
                    Console.WriteLine(" File system: {0}", d.DriveFormat);
                    Console.WriteLine(" Available space to current user:{0, 15} bytes", d.AvailableFreeSpace);
                    Console.WriteLine(" Total available space: {0, 15} bytes", d.TotalFreeSpace);

                    Console.WriteLine(" Total size of drive: {0, 15} bytes ", d.TotalSize);
                }
                string LWName = d.VolumeLabel;
                string erlaubt = "Stick";
                if (string.Compare(LWName, erlaubt) == 1)
                {
                    Console.WriteLine("Der Datenträger mit dem LW Buchstaben:" + " {0}", d.VolumeLabel + " ist für den Datenexport zugelassen !");
                }
                else
                {
                    Console.WriteLine("Der Datenträger mit dem LW Buchstaben: " + d.Name + " ist für einen Export nicht zugelassen !");
                }    
            }
            Console.ReadKey();
        }
    }
}

ich hoffe ich habe mein Problem vernünftig erklärt.
Danke im vorhinein für Eure Hilfe.
Ach Ja bin nicht gerade der beste in C# genauer gesagt ein Neuling im Programmieren

lg Peter

Hallo bin ein Newcomer in der Programierung

2.207 Beiträge seit 2011
vor 10 Jahren

Hallo OrtnerPeter,

willkommen im Forum.

Wie du den Einstieg findest in C# siehst du u.a. hier:
[FAQ] Wie finde ich den Einstieg in C#?

Schau dir auch: [Tipp] Anfängerfehler == true / == false mal an.

Zu deinem Problem: Dein Laufwerk ist aus irgendwelchen Gründen nicht bereit. Das kannst du mit

d.IsReady

abfragen. Ist das false, ist das Laufwerk nicht bereit. (Sorry, sehe gerade, das machst du schon)

Ist Beispielsweise eine CD in deinem CD-Laufwerk?

Weiter funktioniert das mit dem Namen nicht.

Der Konstruktor DriveInfo Constructor nimmt immer nur den Laufwerksbuchstaben.

Dazu: DriveInfo Class

Parameters

driveName
Type: System.String

A valid drive path or drive letter. This can be either uppercase or lowercase, 'a' to 'z'. A null value is not valid. 

[Hinweis] Wie poste ich richtig? 1.1

Schöner wäre es jedoch, einfach mit

DriveInfo.GetDrives Method deine Laufwerke zu holen und darüber zu iterieren.

Gruss

Coffeebean

T
67 Beiträge seit 2010
vor 10 Jahren

Fehlermeldung:
"System.IO.IOException, {"Das Gerät ist nicht bereit.\r\n"}"

Das lässt sich vermeiden indem Du deinen gesamten Code in dein

if(d.IsReady) { /*Anweisungen*/ }

packst und nicht nur deine Consolenausgabe.

Hast Du denn schon mal nachgesehen was dir

d.VolumeLabel

als Wert zurück liefert? Vielleicht entspricht das VolumeLabel nicht deinem erwarteten Anzeigenamen.

O
OrtnerPeter Themenstarter:in
2 Beiträge seit 2012
vor 10 Jahren

Danke für deine Hilfe,
ich werde versuchen den VolumeName als Array zu speichern und zu vergleichen, vielleicht bekomme ich es damit hin

lg Peter

Hallo bin ein Newcomer in der Programierung

T
67 Beiträge seit 2010
vor 10 Jahren

...ich werde versuchen den VolumeName als Array zu speichern und zu vergleichen...

Bevor Du nun hier mit der Kirche ums Dorf baust.
Gewusst wie: Überwachen eines Ausdrucks im Debugger
Du musst nichts irgendwie irgendwo speichern. Setze dir nach

DriveInfo[] allDrives = DriveInfo.GetDrives()

einfach einen Haltepunkt und sehe dir die Variable bzw. deren Inhalt in der Überwachung an.