Laden...

Daten übers Netzwerk senden

Erstellt von JustTom vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.617 Views
JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren
Daten übers Netzwerk senden

Hallo,

in meinem Programm verarbeite ich Bilder indem ich eine Maske über ein Bild lege welches sich auf einem Netzlaufwerk befindet.

  1. Die Netzwerkverbindung bricht allerdings des öfteren zusammen, und daher wollte ich überprüfen ob die Datei auch angekommen ist oder nicht. Wie mach ich das am besten?

  2. Da die Netzwerkverbindung öfters zusammenbricht, überprüfe ich mit

ping = new Ping();
pingReply = ping.Send(@"192.168.2.100", 120);

ob der Server online ist... wenn man jetzt allerdings ein Netzlaufwerk (zb: "T:") als HostNameOrAdress bei ping.Send mitgibt, dann funktioniert das nicht. Wie kann ich in dem Fall die IPAdresse zum Netzlaufwerk ermitteln?

Gruß,
Tom

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

kannst du nicht einfach den hostnamen anpingen der sollte sich ja nicht ändern

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Naja, das ganze sollte natürlich nicht hardcodiert werden. Der Benutzer gibt ein Eingangsverzeichnis ein und das ist in dem Fall eben das Netzlaufwerk...

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

generell denke ich dein eigentliches problem ist die abbrechende netzwerkverbindung.
Ich würde versuchen zuerst einmal das abzustellen.

hast du vielleicht noch mehr infos, z.b wird das netzlaufwerk beim systemstart gemappt oder durch deine anwendung?

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Naja das mit der abbrechenden Netzwerkverbindung liegt nicht an mir sondern an der Hardware vor Ort. Dh die haben dort Richtfunk und momentan ist ein Maisfeld im weg, welches teilweise das Signal stört. Ist immer unterschiedlich...

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

dann würd ich dir empfehlen statt ping etwas in dieser art zu machen am besten vor dem kopieren


            System.IO.DriveInfo drv = new System.IO.DriveInfo(deinLaufwerksbuchstabe);
          
            if (!drv.IsReady)
            {
 
            }

//oder

            System.IO.DirectoryInfo dirinf = new System.IO.DirectoryInfo(deinPfad);
            if (!dirinf.Exists)
            {
 
            }


//und dann hinterher (nach dem kopieren) nochmal kucken ob das drive verbunden //ist und anschließend überprüfen ob die datei die du kopiert hast existiert

//z.b
            System.IO.DirectoryInfo dirinf = new System.IO.DirectoryInfo(deinPfad);
            if (dirinf.Exists)
            {

     System.IO.FileInfo fi = new System.IO.FileInfo("")
            if(!fi.Exists)
            {

            }

 
            }


"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Ok vielen Dank.

Was ist jetzt besser, DriveInfo oder DirectoryInfo?

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

ich kenne deine anwendung nicht deshalb musst du im endeffekt selbst entscheiden was für deine zwecke mehr sinn macht.
Da du allerdings damit ja überpüfen willst ob das laufwerk überhaupt da ist würde ich wahrscheinlich das mit driveInfo machen.

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Scheint allerdings nicht so zu funktionieren wie ich es will...
Wenn ich im Programm zur Laufzeit die Netzwerkverbindung trenne, dann hat driveInfo.IsReady nur folgende Exception: IsReady = Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation.

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

code?

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

System.IO.DriveInfo drv = new System.IO.DriveInfo(@"T:\");
if (drv.IsReady)
{
   bNetworkpath = true;
}
else
{
   bNetworkpath = false;
}

... nicht viel mehr zu sehen als bei deinem Beispiel schon^^
Falls Netzlaufwerk verbunden ist, also Verbindung besteht, funktionierts... dh drv.IsReady == true

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

bei mir funktioniert das egal ob das laufwerk nun da ist oder nicht.
Probier mal bitte :

System.IO.DriveInfo drv = new System.IO.DriveInfo("T");

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

A
61 Beiträge seit 2005
vor 15 Jahren

Scheint allerdings nicht so zu funktionieren wie ich es will...
Wenn ich im Programm zur Laufzeit die Netzwerkverbindung trenne, dann hat driveInfo.IsReady nur folgende Exception: IsReady = Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation.

Das hört sich nach einer Nachricht des Debuggers/Watch an, nachdem dort eine Funktion das TimeOut überschritten hatte...
Also keine wirkliche "Exception"

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Scheint allerdings nicht so zu funktionieren wie ich es will...
Wenn ich im Programm zur Laufzeit die Netzwerkverbindung trenne, dann hat driveInfo.IsReady nur folgende Exception: IsReady = Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation.

Das hört sich nach einer Nachricht des Debuggers/Watch an, nachdem dort eine Funktion das TimeOut überschritten hatte...
Also keine wirkliche "Exception"

Ja, kann gut sein... hab ich vorher noch nie gehabt 😉

@demondriver235: T alleine hat leider nichts geholfen...

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

also wie gesagt, so muss es funktionieren deine exeption hat andere gründe, welche kann ich dir leider auch nicht sagen )-:

läuft es denn ohne debuggen?

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

A
61 Beiträge seit 2005
vor 15 Jahren

Ich meine damit nur, dass wenn es so ist, es nicht an deinen Code liegt sondern daran dass du den code debuggst (bzw. wie du es machst).
Setzt mal den BreakPoint nach dem if-else-Konstrukt und kucke dann was "bNetworkpath" für einen Wert hat. Der müsste dann stimmen.

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Ja, sorry funktioniert. Danke schön!

Gruß,
Tom

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Push...

Zu früh gefreut... sieht so aus als ob das System.IO.DriveInfo erst bemerkt ob eine Verbindung verfügbar ist, wenn man im Windows zB auf T:\ doppelklickt.

Gruß,
Tom

D
496 Beiträge seit 2005
vor 15 Jahren

hab das grad getestet, das funktioniert bei mir auch ohne das ich das laufwerk anklicke.
Es klingt auch nicht logisch wenn dem so wäre.

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

JustTom Themenstarter:in
93 Beiträge seit 2008
vor 15 Jahren

Also folgendes: Es scheint doch so als ob das funktioniert mit dem DriveInfo allerdings erst wenn man auf das Laufwerk doppelklickt bzw. wenn man ziemlich lange wartet (ca. 1 - 2 Minuten). Gibts da irgendwas damit man das Timeout verkürzen kann?

Gruß,
Tom