2017-03-08 4 views
0

Ich arbeite seit Wochen an dieser Verwaltungsanwendung und es ist fast fertig. Was passiert, wenn ein Benutzer auf die Schaltfläche zum Speichern klickt, wird eine VerifyFields() -Methode aufgerufen. Danach sollte der Benutzer gefragt werden, ob er eine E-Mail speichern und senden möchte. Sobald der Benutzer auf Ja klickt, soll er eine E-Mail an die E-Mail-Adressen in einer XML-Datei senden. Ich erhalte die Fehlermeldung "Die Datei: DREmailAddresses.xml wurde nicht gefunden unter: \ fs01 \ Applications \ EMS-Manager." Die Datei ist jedoch vorhanden und zugänglich. Ich habe den untenstehenden Code sowie eine image of the error. kopiert.Zugriff auf XML-Datei über Netzwerk

// Begin Email Section 
    public bool VerifyFields() 
    { 
     var status = false; 
     switch (tbxDynPartNumber.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Dynalab Part#", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxSupplier.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Supplier Name", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxInitiatedBy.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Initiator Name", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (orderQty.Text) 
     { 
      case "0": 
       MessageBox.Show(@"Order Quantity Must Be Greater Than 0!", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 

     switch (dtpDate.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter A Valid Date.", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxDescription.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Description", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 

     switch (tbxLocation.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Location", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     switch (tbxDiscrepancyDescription.Text) 
     { 
      case "": 
       MessageBox.Show(@"Enter Discrepancy Description", @"Input Needed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       status = true; 
       break; 
     } 
     return status; 
    } 

    public void PrepareEmail(string subject, string message) 
    { 
     if (MessageBox.Show(@"Are you sure you want to save and send Discrepancy Report: " +tbxDRNumber.Text + @"?\n Click YES to save\n Click NO to cancel" , @"Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
     { 

      SendEmail(subject,message); 
     } 
    } 
    public Array AddEmail() 
    { 
     string[] dRemail = { "", "", "" }; 
     if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml")) 
     { 
      XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"); 
      while (emailDocument.Read()) 
      { 
       var type = emailDocument.NodeType; 
       switch (type) 
       { 
        case XmlNodeType.Element: 
         if (emailDocument.Name == "DRCreatedAddEmail") 
         { 
          dRemail[0] = emailDocument.ReadInnerXml(); 
         } 
         if (emailDocument.Name == "DRActionNeededAddEmail") 
         { 
          dRemail[1] = emailDocument.ReadInnerXml(); 
         } 
         if (emailDocument.Name == "DRPendingAddEmail") 
         { 
          dRemail[2] = emailDocument.ReadInnerXml(); 
         } 
         else 
         { 
          MessageBox.Show(
           @"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager"); 
         } 
         break; 
       } 
      } 
     } 
     return dRemail; 
    } 
+0

keine Antwort sein sollte, aber die [docs für XmlTextReader sagen] (https://msdn.microsoft.com/en-us/library/1af7xa52 (v = vs.110) .aspx) say _ "Wir empfehlen, mit dem .NET Framework 2.0 XmlReader-Instanzen zu erstellen, indem Sie die XmlReader.Create-Methode verwenden, um die neuen Funktionen zu nutzen." _ – stuartd

+0

Mit Blick auf den Code, den Sie nicht verwenden t scheinen Switch-Statements zu verstehen. All dies hätte mit einfachen if-Anweisungen erledigt werden können. – LeonG

+0

Sie haben Recht, wenn Aussagen. Es kann nützlich sein, den Code für die Verwendung von if-Anweisungen anstelle der switch-Anweisungen zu ändern. Ich bin auch sehr neu im Programmieren und lerne immer noch. Ich habe mir alles selbst beigebracht und mache Fehler, das gehört zum Lernen. Allerdings gehen wir nächste Woche in der Klasse über Switch-Anweisungen. Danke für deinen Beitrag. – TAdams79

Antwort

1

Wenn Sie diese Fehlermeldung erhalten, dann den Code für File.Exists und vorbei am Lesen des Dokuments über die Kontrolle bekommen, aber trifft nur den anderen Zweig der „if (emailDocument.Name = = "DRPendingAddemail") "check.

So Ihre Funktion etwas nah an diesem

public Array AddEmail() 
{ 
    string[] dRemail = { "", "", "" }; 
    if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml")) 
    { 
     XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"); 
     while (emailDocument.Read()) 
     { 
      var type = emailDocument.NodeType; 
      switch (type) 
      { 
       case XmlNodeType.Element: 
        if (emailDocument.Name == "DRCreatedAddEmail") 
        { 
         dRemail[0] = emailDocument.ReadInnerXml(); 
        } 
        else if (emailDocument.Name == "DRActionNeededAddEmail") 
        { 
         dRemail[1] = emailDocument.ReadInnerXml(); 
        } 
        else if (emailDocument.Name == "DRPendingAddEmail") 
        { 
         dRemail[2] = emailDocument.ReadInnerXml(); 
        } 
        else 
        { 
         MessageBox.Show("Unknown node type " + emailDocument.Name); 
        } 
        break; 
      } 
     } 
    } 
    else 
    { 
     MessageBox.Show(@"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager"); 
    } 
    return dRemail; 
} 
+0

Danke dafür. Ich werde dich Vorschlag versuchen. Ich wusste nicht einmal, dass es alle diese Bedingungen überprüft. Auch, da ich SO neu bin, wie akzeptiere ich eine Antwort? – TAdams79

+0

Ich habe von switch-Anweisungen in if-Anweisungen konvertiert und erhalte die gleichen Ergebnisse. – TAdams79

+0

Stellen Sie sicher, dass Sie die Else-Anweisung genau dort haben, wo ich sie in meinem Beispiel angegeben habe. Wenn Sie wissen, wie Sie den Debugger in Visual Studio verwenden, setzen Sie einen Haltepunkt in beide else-Anweisungen und sehen Sie, welcher ausgeführt wird. Beachten Sie, dass ich einen neuen Codepfad hinzugefügt habe, in dem Ihre alte MessageBox eine andere Fehlermeldung hatte. Stellen Sie daher sicher, dass die richtige Nachricht angezeigt wird ("Dateiname gefunden" oder "unbekannter Knotentyp"). –