2016-05-16 26 views
1

ich eine Datei im folgenden Format haben:entfernen Leerraum aus einer Textdatei in Windows Forms-Anwendung

sagchjvcsj kbschjsdchs  sudbjsdbl avhsdvbas 
sdvbchjbvsdjc kbsadcsadk kskbjdsdcksajdbc kansjdnas ajksbdajsdk 

mit der richtigen Reihenfolge white spaces zwischen den Wörtern. Ich möchte alle extra white spaces entfernen und nur 1 white space zwischen den Wörtern lassen. Meine Arbeitsweise ist:

private void buttonBrowse_Click(object sender, EventArgs e) 
{ 
    openFileDialogImage.Filter = "Text files | .txt"; 
    openFileDialogImage.Multiselect = false; 

    DialogResult result = openFileDialogImage.ShowDialog(); 
    if (result == DialogResult.OK) 
    { 
     textBoxFileName.Text = openFileDialogImage.FileName; 
    } 
} 

private void buttonGo_Click(object sender, EventArgs e) 
{ 
    String path = openFileDialogImage.FileName; 
    using (StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open))) 
    { 
     string s = String.Empty; 
     while ((s = reader.ReadToEnd()) != null) 
     { 
      string[] parts = s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
     } 
    } 
} 

buttonBrowse richtig in textBoxFileName den Dateipfad angezeigt wird, aber wenn ich die Go-Taste (buttonGo) drücken, Programm ohne Ausgang Einfrieren. Kann jemand bitte führen.

+0

Hit 'Pause All' zu string.Empty ändern, während das Programm ausgeführt wird, und sieht, wo die Ausführung ist. Durchschreiten und sehen, was passiert. – Blorgbeard

+1

Nicht verwandt (denke ich), aber es gibt keinen Grund, 'reader.Close()' aufzurufen, wenn Sie eine 'using'-Anweisung verwenden. –

+0

@GrantWinney, das stimmt. Danke – Jogi

Antwort

1

Ihre While-Schleife endet nie.

while ((s = reader.ReadToEnd())! = Null)

Der ReadToEnd einen String zurückgibt jedes Mal, es Schleifen (wenn am Ende ist es eine leere Zeichenfolge - Nicht null.

Wenn die aktuelle Position am Ende des Stroms ist, gibt einen leeren String

Du hast ne ed, um entweder die while-Schleife zu entfernen und nur tun:

s = reader.ReadToEnd() 

oder null

+0

Danke für Ihre Antwort. Es hat das Einfrieren Problem beseitigt, aber es ändert nichts an der Originaldatei, die außerhalb der Reihenfolge Leerraumproblem hat. Irgendwelche Ideen warum? – Jogi

+0

Sie speichern es nicht, ist ein Grund. –

+0

Wie speichern? Eigentlich muss ich auch "extra Leerzeichen" auf "ein Komma" setzen und speichern? – Jogi

Verwandte Themen