2014-02-28 42 views
1

之前清除文件我使用這個代碼寫入到我的文件:如何寫進去

private async void play_Click(object sender, RoutedEventArgs e) 
    { 
     String MyScore; 

     Double previousScore = 0; 

     StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; 
     var dataFolder1 = await local.CreateFolderAsync("MyFolder", CreationCollisionOption.OpenIfExists); 
     var file1 = await dataFolder1.CreateFileAsync("MyFile.txt", CreationCollisionOption.OpenIfExists); 
     var file = await dataFolder1.OpenStreamForReadAsync("MyFile.txt"); 

     using (StreamReader streamReader = new StreamReader(file)) 
     { 

      MyScore = streamReader.ReadToEnd(); 



     } 

     if (MyScore != null && !MyScore.Equals("")) 
     { 

      previousScore = Convert.ToDouble(MyScore); 
     } 


     Double CurerentScore = 0; 
     Double Total = 0; 

     String scoreText = this.ScoreTB.Text; 
     CurerentScore = Convert.ToDouble(scoreText); 
     Total = previousScore - CurerentScore; 


     using (var s = await file1.OpenStreamForWriteAsync()) 
     { 

      byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(Convert.ToString(Total)); 
      s.Write(fileBytes, 0, fileBytes.Length); 

     } 
    } 

但寫進去之前,我想我的文件應該被清除。我該怎麼辦?

這是我到目前爲止所嘗試的,但問題是它將文件寫入filebytes.length,並且由於該文件在文件中寫入的新信息與長度相比較少privous長度那麼一些垃圾值或unnecessay的事情來了新的文件結束後

+0

其實我使用fileBytes.Length因爲我的文件所著高達它的長度(假設我有我的文件135的下一次我subtarcting 40所以結果應該是95,但答案是955一個額外的5來自135,因爲135有3個數字,所以fileBytes.length使95到三位數,結果是955) – zap92

+0

你試過了什麼? – Thomas

回答

3

您可以使用此代碼片段:

StorageFolder folder = ApplicationData.Current.LocalFolder; 
StorageFile file1 = await folder.CreateFileAsync(fileName, 
CreationCollisionOption.ReplaceExisting); // You are going to replace the file 
using (Stream s = await file1.OpenStreamForWriteAsync()) 
{ 
    byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(Convert.ToString(Total)); 
    await s.WriteAsync(fileBytes, 0, fileBytes.Length); 
} 

引述documentation

ReplaceExisting:使用所需名稱 創建新文件或文件夾,並用該名稱替換已存在的任何文件或文件夾。

+0

ReplaceExisting在我的情況下不起作用,因爲我不想替換我想覆蓋它的現有文件。 – zap92

1

我有明確的文件寫一個空字符串,然後我寫了什麼,我想在我的文件中這解決了我的問題,因爲沒有過這個文件中的所以無論如何我想寫信給它來了成功。

0

只需使用Stream.SetLength這樣的:

using (var s = await file1.OpenStreamForWriteAsync()) 
{ 
    // Add this line 
    s.SetLength(0); 

    // Then write new bytes. use 's.SetLength(fileBytes.Length)' if needed. 
    byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(Convert.ToString(Total)); 
    s.Write(fileBytes, 0, fileBytes.Length); 
}