2010-11-19 75 views
1

它似乎是一個罕見的問題,我無法保存文本文件的數據 strpath =「c:\ path \ 1234 \ abcd.txt」;無法保存c#中的文本文件數據

這裏的文件正在創建,但文件中的數據沒有被保存。

,如果我通過BYTE B長度檢查是節目121

public int SaveFile(byte[] b,string lstrpath) 
     { 
FileStream fs = new FileStream(strpath,FileMode.Create); 
       fs.Write(b,0,b.Length); 
       fs.Close(); 
       if(File.Exists(strpath)) 
       { 
        return 1; 
       } 
       else 
       { 
        return 0; 
       } 
} 

有什麼,我錯了嗎?

+1

那麼*發生了什麼?之後的文件是什麼? – 2010-11-19 08:16:35

回答

1

你不會處理和沖洗流。因爲這個,如果發生異常,你的程序將會泄漏一個文件句柄。試試這個:

public void SaveFile(byte[] b,string lstrpath) 
{ 
    File.WriteAllBytes(lstrpath, b); 
} 

現在那種違背了SaveFile方法的目的,因爲它已經內置到BCL。

0

在關閉前執行Flush()。那是fs.Flush();

+0

無論如何,關門都會沖洗它 – 2010-11-19 08:56:33

0

可能是幾件事,當然?你不檢查文件是否已經存在。你不檢查目錄是否存在。您不檢查您的文件系統權限。其中任何一個都可能導致它失敗。

另外,當你說失敗時,你是什麼意思?你有例外嗎?一個錯誤?它返回0還是1?它是否默默地失敗?文件是否被創建爲空?

您也需要在這裏進行一些錯誤處理,這樣做會有雙重好處,可以告訴您錯誤發生的位置,並希望獲得更多關於錯誤的信息。

0

其他答案都是有效的(異常處理,處置,...),你甚至可能想要使用using聲明。我會選擇Darin Dimitrovs的答案,這會讓你的代碼更加簡單易讀。

至於你的問題:你是怎麼調用這個方法的?這適用於我在一個簡單的控制檯應用程序:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var text = "abcd"; 
     var encoding = new UTF8Encoding(); 
     var bytes = encoding.GetBytes(text); 
     SaveFile(bytes, @"D:\test.txt"); 
    } 

    public static int SaveFile(byte[] b, string strpath) 
    { 
     FileStream fs = new FileStream(strpath, FileMode.Create); 
     fs.Write(b, 0, b.Length); 
     fs.Close(); 
     if (File.Exists(strpath)) 
     { 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 
    } 
} 

注意我使用完全相同的方法。它每次都適用於我,因此文件已經存在。在你的情況下,你可能不會傳遞一個字符串?也許編碼有問題?