[C#) Filenames aufrufen

Fisch

Mitglied
Ich hab da mal wieder eine Frage: Ich benötige das Datei-Fenster, damit man sich dort mehrere Dateien aussuchen kann, die dann nacheinander geöffnet werden sollen.
Wenn ich mich nicht irre, gibt es doch hierfür Die Methode FileDialog.Filenames(), die mir eine ArrayList zurückliefert. Aber irgendwie habe ich das mit Windows.Forms und den dazugehörigen Erklärungen in der .NET Doku noch nicht so geschnallt. Kann mir jemand mal den Code zeigen evtl. mit kurzer Erklärung.

Danke

Fisch
 
Zuletzt bearbeitet:
So musst Du den FileDialog aufrufen:
Code:
protected void button1_Click(object sender, System.EventArgs e)
{
    Stream myStream;
    OpenFileDialog openFileDialog1 = new OpenFileDialog();

    openFileDialog1.InitialDirectory = "c:\\" ;
    openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
    openFileDialog1.FilterIndex = 2 ;
    openFileDialog1.RestoreDirectory = true ;

    if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        if((myStream = openFileDialog1.OpenFile())!= null)
        {
            // Insert code to read the stream here.
            myStream.Close();
        }
    }
}

Mit openFileDialog1.FileNames bekommst Du ein Array zurück, welches alle selektierten Dateinamen enthält!
Du musst über das Array iterieren und Dir die einzelnen Dateinamen herausholen!
 
ok, das ist ja glaube ich das Beispiel aus der Doku.

Muss die Methode als protected void geschrieben sein.
oder könnte ich auch so schreiben:

public ArrayList button1_Click(object sender, System.EventArgs e)
{
Stream myStream;
OpenFileDialog openFileDialog1 = new OpenFileDialog();

openFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;

if(openFileDialog1.ShowDialog() == DialogResult.OK)
{

return openFileDialog1.Filenames();

}
}

Ich mein ich vermute ja schon das, dass nicht geht, aber irgenwie verstehe ich nicht, wie ich in der Main-Methode an die ArrayList drankomme.Oder muss ich wirklich meinen ganzen Code dann in die Schleife legen.Wenn ja, kann man automatisch im Dialog mehrere Dateien auswählen?? Kannst Du mir mal das zusammenspiel zwischen Main() und button1_click() aufzeigen,den irgendwie müssen doch auch die beiden Parameter an die Methode übergeben werden oder? Irgendwie ist mir das noch zu hoch.
Gibt es die Methode auch ohne das die Dateien direkt geöffnet werden??
Ich weiss, ich hab wieder viele Fragen, aber irgendwie brauch ich das nochmal erklärt bis der Groschen fällt
 
Zuletzt bearbeitet:
Zusammenspiel main() und button1_click()?
Main() ist die Einsprungsroutine einer Konsolenanwendung, Du meinst wahrscheinlich Deine Hauptklasse von wo aus Du die button1_click() aufrufst!

Du darfst nich zu kompliziert denken! Stell Dir vor, Du hast in Deiner FORM-Klasse ein Array, in der Du die selektierten Dateien speichern willst!

Der Zeiger auf das Array welches Du von openFileDialog1.Filenames() zurückerhälst ist nur temporär! Also musst Du dieses Array in Dein Array umkopieren!!

Solange Du dieses Array innerhalb der FORM-Klasse weiter verwenden willst hast Du keine grösseren Probleme.
Willst Du dieses Array aber Klassenübergreifend anwenden, so musst Du es global deklarieren oder in Deiner Hauptklasse (wie beispielsweise CDocument in der MFC).

Klingt alles etwas kompliziert, was? Hoffe, Du hast es trotzdem verstanden!
 
1. Ehrlich gesagt wusste ich nicht, dass MAin() nur der Einsprungspunkt für Konsolenanwendungen ist. Wie ist das bei Windowsanwendungen??

2.Irgenwie müssen wir konkret werden, sonst raffe ich das nicht

Meinst Du so in der Art???

Ich habe die Klasse A mit der Methode button1_click

class A
{

public ArrayList Dateinamen;


protected void button1_Click(object sender, System.EventArgs e)
{
Stream myStream;
Dateiname = new ArrayList();
OpenFileDialog openFileDialog1 = new OpenFileDialog();

openFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;

if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
this.Dateinamen = openFileDialog.Filenames();

if((myStream = openFileDialog1.OpenFile())!= null)
{
// Insert code to read the stream here.
myStream.Close();
}
}


Dann könnte ich doch von Klasse B mit A.Dateinamen auf das Array zugreifen,oder??. Wäre schön wenn Du mir das Anhand des Codes erklären könntest. So Pauschal verstehe ich das nicht(CDokument sagt mir nix), ich bin doch noch im Lernstadium. Ich weiss nämlich auch immer noch nicht was mit den Argumenten in der Methode button1_click auf sich hat(sender, EventArgs).
 
So, ich glaube so langsam schnall ich das. Allerdings musste ich auch erstmal den EventHandler kennen lernen. Den FileDialog habe ich schonmal geöffnet bekommen, allerdings kann ich bis jetzt dort nur eine Datei markieren, wie mache ich das wenn ich mehrere Dateien markieren möchte ???
 
Na, langsam nimmt es ja Formen an!!!

Hatte ich mir fast gedacht, dass Du nur eine Datei selektieren kannst! Meine Schuld! Habe vergessen zu sagen, dass Du das Multiselekt-Flag setzen musst!

OpenFileDialog.Multiselect Property

Dann klappt's auch mit dem Selektieren!
 
Hab ich schon gemerkt und das funktioniert sogar :).
Ich denke soweit komme ich klar, aber ich hätte da nochmal ne andere Frage, wie kann aus ner Datei eine betimmte Anzahl an Zeichen auslesen. Bei ReadLine liest er ja Zeilenweise. Bei Read() Zeichenweise, liefert aber int zurück. Muss ich irgenwie ein ref CHAR[] übergeben ??wie Rufe ich das auf?? datei.Read(ref char[],anfang,länge)??
 
Read wird Dir die tatsächlich gelesene Anzahl Zeichen zurückliefern.
ref CHAR[] bedeutet nur, dass Du Dein Puffer als Referenz übergeben musst, also vorher anlegen!

So müsste es eigentlich gehen:
CHAR szBuffer[buffergrösse]; // buffergrösse ist eine Zahl

....

datei.Read(szBuffer, 0, buffergrösse);
 
Wenn ich das richtig verstehe,lege ich ein Array char an
char szbuffer[5]

//ich dachte Array legt man so an char[] szbuffer = new char[5]

und mit datei.Read(szbuffer,0,5) sage ich lese von 0 die nächsten 5 Zeichen und die Methode schreibt jedes Zeichen in szbuffer[0]--[4].
Ist das richtig???

Wenn ja, kann ich die ReadLine Methode auch so anwenden, dass nicht die ganze Zeile als string eingelesen wird sonder eine bestimmte Anzahl an Zeichen als string??

Das war dann auch die letzte Frage(fürs erste) , versprochen
:)
 

Neue Beiträge

Zurück