buttonBrowse



  • hallo

    ich bin neu hier und und anfänger
    habe auch gleich eine frage.

    und zwar versuche ich grad an ein buttonBrowse hinzubekommen

    ich möchte eine datei öffnen und an ein programm weitergeben

    so schau es bis jetzt aus:

    private void buttonBrowse_Click(object sender, RoutedEventArgs e)
            {
                ofd = new OpenFileDialog();
                ofd.DefaultExt = "file|*.*";
                ofd.Filter = "file|*.*";
                ofd.Multiselect = true;
                if (ofd.ShowDialog().HasValue)
                {
                    Stream[] fileContents = ofd.OpenFiles();
                    string[] fileNames = ofd.SafeFileNames;
                    {
                        {
                            Process process = new Process
                            {
                                StartInfo =
                                {
                                    FileName = "test\\programm.exe",
    
                                }
                            };
                            process.Start();
                            process.WaitForExit();
                            {
    

    nur leider wird die datei an das programm nicht übergeben

    wäre für jeder hilfe dankebar

    lg peter



  • Also erstmal ein paar Grundlegende Sachen.

    1. Was sollen diese vielen Scope-Klammern? Ich hab ja nichts dagegen wenn man einen Scope zur Übersicht aufmacht, aber du hast es da etwas übertrieben 🙂

    2. Die Dateien die du da Alle öffnest, solltest du nach Beendigung deines Programmes auch wieder schließen.

    3. Und naja, du übergibst deinem neuem Prozess doch nirgends die Dateinamen die er öffnen soll. Woher soll er also wissen was er machen soll?



  • wie gesagt ich bin anfänger und hatte gefofft das mir jemand die richtung zeigt.



  • Ja hab ich das nicht gemacht?
    Ich hab dir zum einen Tips gegeben was du Grundlegend falsch gemacht hast.

    Noch ein paar zusätzliche Tips:

    Über die Klasse Process kannst du in der MSDN was durchlesen.

    Und der Konstruktor bietet dir die Möglichkeiten dem Prozess beim Start diversen Informationen mit zu übergeben. Hier kannst du deiner Exe zum Beispiel das Array von FileNames übergeben was du bereits ermittelt hast. Dann kannst du sogar das öffnen der Dateien über ofd.OpenFiles() weglassen.



  • doch hast du gemacht nur ich weiß nicht wie ich das umsetzen soll

    ich hab jetzt versucht :

    private void buttonBrowse_Click(object sender, RoutedEventArgs e)
            {
                ofd = new OpenFileDialog();
                ofd.DefaultExt = "file|*.pdf";
                ofd.Filter = "filen|*.pdf";
                ofd.Multiselect = true;
                if (ofd.ShowDialog().HasValue)
                {
                    Stream[] fileContents = ofd.OpenFiles();
                    string[] fileNames = ofd.SafeFileNames;
                    for (int i = 0; i < fileNames.Length; i++)
                    {
                        {
                            Process process = new Process
                            {
                                StartInfo =
                                {
                                    FileName = "test\\programm.exe",
                                    Arguments = string.Format("*.pdf")
    
                                }
                            };
                            process.Start();
                            process.WaitForExit();
                            {
    

    aber es geht immer noch nicht

    ich hoffe das du eventuell eine lösung weißt



  • Servus,

    Firefighter teilt dir u.A. mit, dass du dich auch ein bisschen mit Grundlagen auseinander setzen müsstest. Vielleicht auch mal das ein oder andere Tutorial machen.

    Zu den Grundlagen gehört auch der Umgang mit dem Debugger. Wenn du dir deine Arguments einmal ansiehst, dann wirst du feststellen, dass dort nur "*.pdf" drin steht. Ein string.Format ist an dieser Stelle unnötig.

    Was möchtest du denn an dein auszuführendes Programm übergeben? Ein FileHandle oder der Dateiname? Wahrscheinlich nur den Dateinamen... Dann kannst du dir auch dein Openfiles sparen.

    Du hast nun mehrere Möglichkeiten mit deinem Problem umzugehen. Entweder übergibst du jeden Dateinamen einzeln an dein Programm und führst es aus oder du übergibst z.B. Komma separiert, wenn das Programm damit umgehen kann, die Dateinamen.

    Ein kleines Beispiel mit .Net 2.0 erstellt:

    private OpenFileDialog ofd;
    
    private void button1_Click(object sender, EventArgs e)
    {
        this.ofd = new OpenFileDialog();
        this.ofd.DefaultExt = "file|*.pdf";
        this.ofd.Filter = "filen|*.pdf";
        this.ofd.Multiselect = true;
    
        if (this.ofd.ShowDialog() == DialogResult.OK)
        {
            Process process = new Process();
            foreach (string fileName in this.ofd.SafeFileNames)
            {
                // Hierbei ist aber zu beachten, dass fileName keine Pfadangabe enthält
                // Dateiname mit Pfad -> this.ofd.FileNames
                process.StartInfo = new ProcessStartInfo(@"C:\DeinProgramm\prog.exe", fileName);
                process.Start();
                process.WaitForExit();
            }
        }
    }
    

    Ich habe das Beispiel ähnlich zu deinem Schnippsel gehalten, damit du die Zeilen auch nachvollziehen kannst.

    Aber nochmal zur Verdeutlichung in Kurzform:
    - Syntax kennen lernen und mit rumspielen
    - Debugger ist "nicht" Bahh, es ist dein Freund
    - Beispiele im Internet suchen -> z.B. google: Process start c#
    - Tuts durchspielen

    Wenns dann immernoch nicht klappt, dann einfach nachfragen... Die Antworten sind zwar manchmal sehr direkt aber nie Böse gemeint. Es sei denn, man beachtet die Ratschläge nicht 😉

    EDIT:
    BTW. Das was ich dir jetzt ausführlich aufgeführt habe, hat dir Firefighter schon in seinem ersten Posting beschrieben und das eigentlich noch nicht mal zu knapp 🙂

    gruß
    Hellsgore



  • vielen dank erstmal

    leider bekomme ich ein invalid error hatte nur zb pdf angegeben aber es handelt sich um ein *.xap file

    liegt es eventuell daran das ich den folgenden abschnitt ändern musste damit das fenster zur auswahl aufgeht

    private void buttonBrowse_Click(object sender, RoutedEventArgs e)
    {
    this.ofd = new OpenFileDialog();
    this.ofd.DefaultExt = "file|.xap";
    this.ofd.Filter = "filen|
    .xap";
    this.ofd.Multiselect = true;
    if (ofd.ShowDialog().HasValue)

    [/cs]

    und bei den programm.exe steht das zur auswahl

    wp7-deploy.exe path\to\xap\file.xap -destination[modifiers]

    Example

    wp7-deploy.exe c:\mytest2.xap -dsr



  • Hmm,

    das sollte doch nun eigentlich ein Leichtes sein...

    this.ofd = new OpenFileDialog();
    this.ofd.DefaultExt = "Silverlight Application Package|*.xap";
    this.ofd.Filter = "Silverlight Application Package|*.xap";
    this.ofd.Multiselect = true;
    
    if (this.ofd.ShowDialog() == DialogResult.OK)
    {
        Process process = new Process();
        string argument = string.Empty;
        foreach (string fileName in this.ofd.FileNames)
        {
            argument = string.Format("{0} -dsr", fileName);
    
            process.StartInfo = new ProcessStartInfo("wp7-deploy.exe", argument);
            process.Start();
            process.WaitForExit();
        }
    }
    

    Das ist aber nun schon stark vorgekaut...

    gruß
    Hellsgore



  • ich weiß das ich scjon viel bekommen habe und bin auch echt dankbar

    nur leider bekomme ich immer noch eine fehlermeldung stopped. incorrect aguments.



  • habe es so gelöst

    argument = string.Format("\"{0}\" -dsr", string.Format("{0}", fileName));
    

    vielen lieben dank euch beiden juhuu

    pc.: gleich mal anmelden hier 😉



  • Darf ich fragen warum du für alles ein string.Format benutzt? Ist in deinem letzten Post, bei dem zweiten Parameter doch gar nicht nötig.



  • stimmt hast recht thx



  • edit: hat sich erledigt



  • wäre toll wenn sich jemand finden lässt der mir bei der lösung helfen kann
    gruß peter


Anmelden zum Antworten