2014-07-22 68 views
0

我有以下代碼讀取一個文本文件,並計數多少次出現過的單詞,然後將其保存到一個變量:如何將變量值寫入到文件

try 
      { 
       StreamReader sr = new StreamReader(@"C:\Readfile.txt"); 
       text = sr.ReadToEnd(); 

       string textData = Regex.Replace(text, @"[^0-9a-zA-Z]+", " "); 

       char[] whitespace = new char[] { ' ', '\t' }; 
       string[] data = textData.Split(whitespace); 
       int i = 1; 

       while (i < data.Length) 
       { 
        st = data[i]; 

        string[] source = text.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries); 

        var matchQuery = from word in source 
            where word.ToLowerInvariant() == st.ToLowerInvariant() 
            select word; 

        int wordCount = matchQuery.Count(); 
        k += wordCount + ": " + st + "\n"; 
        //MessageBox.Show(k); 
        i++; 
       } 
       StreamWriter sr4 = new StreamWriter(@"C:\WhatFound.txt"); 
       sr4.Write(k); 

      } 
      catch (Exception ce) 
      { 
      } 
     } 

當我點擊按鈕它應該將變量k寫入WhatFound.txt,但沒有任何事情發生。

我該如何解決?

+5

你檢查,看看你的StreamWriter拋出一個異常?空的catch塊是一個no no – tier1

+0

什麼都沒有發生,因爲你說「如果有錯誤,什麼也不要做,不要通知我。」 – usr

+0

謝謝。我添加了try catch塊,但它是由@AlexD解決它的答案:) – Si8

回答

1

您的代碼可能存在不同的問題。正如@ tier1所說,它可能是一個例外。此外,你應該關閉流。一個簡單的替代方法可能是

File.WriteAllText(@"C:\WhatFound.txt", k); 

(它仍然可能拋出當然是一個例外。一般來說,最好避免空包羅萬象的塊。)

1

你有沒有睾丸,如果你k變量是空的?

也許工作正常,正在寫東西,但如果k是空的,那麼它應該顯示爲沒有任何事情發生。

嘗試類似:

if(!string.IsNullOrEmpty(k)): 
    //Then write in the text file 

而且在finally塊...

編輯:由於AlexD說:更好地利用使用

using (StreamWriter sw = new StreamWriter("CDriveDirs.txt")) 
      { 
       foreach (DirectoryInfo dir in cDirs) 
       { 
        sw.WriteLine(dir.Name); 

       } 
      } 

下面的鏈接:

http://msdn.microsoft.com/es-es/library/system.io.streamwriter(v=vs.110).aspx

OLD:

關閉流

try 
{ 
} 
catch 
{ 
} 
finally 
{ 
    sr4.Close() 
} 
+0

是的,你可以這樣做...是一樣的,但你是對的,這是更清晰的方式;) –

1

另一個可能的問題,除了由奧斯卡布拉洛和AlexD提到的:你跳過第一個字。

我相信你應該做到以下幾點:

for (int i = 0; i < data.Length; i++) 
{ 
    // Process data[i] 
} 

在你原來的代碼,你就「我」的一個:

  int i = 1; 

      while (i < data.Length) 
      { 
       // Process data[i] 
       i++; 
      }