none
Visual C# RRS feed

  • Frage

  • Hallo Experten

    Ich hoffe Ihr könnt mir helfen, ich habe ein kleines Programm zum Kopieren von Fotos geschrieben. Das Programm soll nach betätigen das Buttons die Inhalte der zwei Textboxen sowie der zwei DateTimepicker in eine Textdatei schrieben. In meinem Codebeispiel klappt das aber nur mit der ersten Textbox? (Ich bekomme auch keine Fehlermeldung im Debugger). Im Anschluss soll eine Batchdatei aufgerufen werden die sich auf einem USB Stick befindet ( Variable Pfadangabe).

    Habt Ihr eine Ahnung was ich falsch mache? Vielen Dank im Voraus  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// Interaktionslogik für MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
            {
    
            }
    
            private void textBox2_TextChanged(object sender, TextChangedEventArgs e)
            {
    
            }
    
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Frank\Desktop\ff\Fotos.txt"))
                    file.WriteLine(textBox1.Text,textBox2.Text);
                    file.WriteLine(datePicker1.Text,datePicker1.Text);
    
                MessageBox.Show("Anfrage erfolgreich");
                textBox1.Clear();
                textBox2.Clear();
    
                System.Diagnostics.Process.Start(@"\Pics\Sotieren.bat");
             
            }
    
            private void datePicker2_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
    
            }
    
            private void datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
    
            }
    
            
            }
        }
    

    Freitag, 13. Februar 2015 12:46

Antworten

  • Hallo zusammen,
    wie Thomas schon schrieb, fehlen die geschweiften Klammern. Weiterhin erfüllst du nicht die nötigen Parameter für eine der Überladungen der Write/WriteLine-Methode. Diese nehmen in den meisten Fällen nur einen Parameter entgegen:
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Frank\Desktop\ff\Fotos.txt"))
    {
        file.Write(textBox1.Text);
        file.WriteLine(textBox2.Text);//Durch WriteLine kommt ein Zeilenumbruch ans Ende
        file.Write(datePicker1.Text);
        file.WriteLine(datePicker1.Text);
    }
    Ggf. kannst du natürlich auch alle 4 Daten auf eine extra Zeile schreiben. Weiterhin solltest du genau darauf achten in welcher Form du das Datum in die Datei schreibst. Ich weiß nicht wie das weiter verarbeitet werden soll, u.U. hilft dir jedoch eine der ToString-Überladungen. In dem verlinkten Beitrag findest du einige Beispiele um bestimmte Datumsformate auszugeben.

    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Freitag, 13. Februar 2015 13:19
    Moderator
  • Wie Tom schon schrieb, hast Du durch den zweiten Parameter eine Überladung von WriteLine erwischt, die so ziemlich alles akzeptiert; nur geschieht bei Dir nichts weiter mit den 2ten Parameter. Du müsstes stattdessen erst einen Format-String angeben und danach die Parameter; die Stelle wo die Werte eingefügt werden definierst Du über Parameter-Platzhalter {} =>

    file.WriteLine("{0} {1}", textBox1.Text, textBox2.Text);


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 13. Februar 2015 13:29

Alle Antworten

  • Der Fehler liegt (meiner Meinung nach) in der Using-Anweisung. Nur der erste file.WriteLine-Aufruf ist gültig, der zweite nicht. Packe diese doch bitte in Klammern:

    using(var file = ...) {
       file.WriteLine(...);
       file.WriteLine(...);
    }


    © 2015 Thomas Roskop

    Germany // Deutschland

    Freitag, 13. Februar 2015 13:03
  • Danke Thomas für deine Antwort 

    leider hat es nicht funktioniert , falls du es so gemeint hast :

    using (var file = new System.IO.StreamWriter(@"C:\Users\Frank\Desktop\ff\Fotos.txt"))
                    file.WriteLine(textBox1.Text,textBox2.Text);
                    file.WriteLine(datePicker1.Text,datePicker1.Text);

    Freitag, 13. Februar 2015 13:14
  • Hallo zusammen,
    wie Thomas schon schrieb, fehlen die geschweiften Klammern. Weiterhin erfüllst du nicht die nötigen Parameter für eine der Überladungen der Write/WriteLine-Methode. Diese nehmen in den meisten Fällen nur einen Parameter entgegen:
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Frank\Desktop\ff\Fotos.txt"))
    {
        file.Write(textBox1.Text);
        file.WriteLine(textBox2.Text);//Durch WriteLine kommt ein Zeilenumbruch ans Ende
        file.Write(datePicker1.Text);
        file.WriteLine(datePicker1.Text);
    }
    Ggf. kannst du natürlich auch alle 4 Daten auf eine extra Zeile schreiben. Weiterhin solltest du genau darauf achten in welcher Form du das Datum in die Datei schreibst. Ich weiß nicht wie das weiter verarbeitet werden soll, u.U. hilft dir jedoch eine der ToString-Überladungen. In dem verlinkten Beitrag findest du einige Beispiele um bestimmte Datumsformate auszugeben.

    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Freitag, 13. Februar 2015 13:19
    Moderator
  • Wie Tom schon schrieb, hast Du durch den zweiten Parameter eine Überladung von WriteLine erwischt, die so ziemlich alles akzeptiert; nur geschieht bei Dir nichts weiter mit den 2ten Parameter. Du müsstes stattdessen erst einen Format-String angeben und danach die Parameter; die Stelle wo die Werte eingefügt werden definierst Du über Parameter-Platzhalter {} =>

    file.WriteLine("{0} {1}", textBox1.Text, textBox2.Text);


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 13. Februar 2015 13:29
  • Hallo Olaf, Hallo Tom 

    Herzlichen Dank für euer ausführliche Antworten. Ich konnte darauf aufbauend nun viele weitere Auslagerungen programmieren.  (Bedeutung verstanden :-)) 

    Allerdings habe ich es bis jetzt noch nicht geschafft im Anschluss den Batch ausführen zu lassen.
    Dies geht immer nur dann wenn ich einen absoluten Pfad angebe.

    Ich habe es mit dieser Zeile versucht :

     System.Diagnostics.Process.Start(@"\Pics\Sotieren.bat");

    Ist das keine relative Pfadangebe?

    VD Frank

    Freitag, 13. Februar 2015 15:54
  • Hallo Frank,

    Die relativen Pfadangaben gehen immer vom Ausführungsverzeichnis aus. Im Normalfall also von dem Ordner aus wo die EXE liegt. Wenn nun die BAT-Datei im Ordner Pics liegt, musst du noch das Backslash am Anfang weg lassen.

    System.Diagnostics.Process.Start(@"Pics\Sotieren.bat");
    Dann sollte es funktionieren.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Freitag, 13. Februar 2015 15:58
    Moderator