2013-05-02 79 views
1

我有一個名爲Load.txt的文本文件,其中包含大約200行。我有一個複選框,如果選中了,那麼我想創建一個只有Load.txt中前100行的新文件。我正在使用C#來編寫這個程序。其實我真正的要求是我必須從第110行刪除到201.而我的代碼是在下面,因爲某種原因,它從第1行刪除到92.我不知道發生了什麼。從c中的文本文件中刪除一些內容#

  String line = null; 

      String tempFile = Path.GetTempFileName(); 
      String filePath = saveFileDialog1.FileName; 

      int line_number = 110; 
      int lines_to_delete = 201; 

      using (StreamReader reader = new StreamReader(sqlConnectionString)) 
      { 
       using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName)) 
       { 
        while ((line = reader.ReadLine()) != null) 
        { 
         line_number++; 

         if (line_number <= lines_to_delete) 
          continue; 

         writer.WriteLine(line); 
        } 
       } 
      } 

所以我想通了這個問題。但我的下一個問題是:我正在更新文本文件中的一些變量。在我的代碼沒問題之前。但是現在,該代碼與我的刪除行代碼衝突。如果我能夠刪除行,那麼我無法更新這些變量。

我的代碼是:

File.WriteAllLines(saveFileDialog1.FileName, System.IO.File.ReadLine(sqlConnectionString).Take(110)); 
File.WriteAllText(saveFileDialog1.FileName, fileContents); 
+1

你到目前爲止嘗試過什麼? – 2013-05-02 15:03:40

+0

-1對於不打擾Google這樣一個簡單的問題 – tnw 2013-05-02 15:06:24

+0

你爲什麼要讀取存儲在'sqlConnectionString'中的文件名?適當地命名你的變量。 – 2013-05-02 16:50:08

回答

2
File.WriteAllLines("new.txt", File.ReadLines("Load.txt").Take(100)); 

更新後...

var desired = File.ReadLines("Load.txt") 
        .Take(110) // "And I want to keep 1-110" -- OP 
        .Select(line => UpdateLine(line)); // "And I also want to update variables between 1-110" -- OP 

File.WriteAllLines("new.txt", desired); 

... 

static string UpdateLine(string given) 
{ 
    var updated = given; 
    // other ops 
    return updated; 
} 

MSDN File.WriteAllLines
MSDN File.ReadLines

+0

現在你的我的代碼並沒有刪除我希望在110之後的那些代碼行。但是它能夠在110行之後更新變量,而不是110之前的變量。所以我想更新行1-110中的變量並刪除所有行110之後的行。 – 2013-05-02 16:56:16

+0

@JaspreetkaurDeol:你的問題狀態_I我想刪除行110到200_,但你在這裏陳述,你想在行110刪除後的一切 - 這是什麼? 「load.txt」中有多少行,並且要保留哪些行? – 2013-05-02 16:59:55

+0

好吧,所以我有一個在load.txt中有201行的文件。我想刪除110-201中的行。我也想更新1-110之間的變量。我想保持1-110。 – 2013-05-02 17:02:55

0

這應該完成你所需要的。它讀取文本然後轉儲它的100行。

 System.IO.File.WriteAllLines("newLoad.txt", System.IO.File.ReadLines("Load.txt").Take(100)); 
+0

其實我也替換了文本文件中的一些內容。現在我的問題是,如果我從文本文件中刪除一些行,那麼文件的其餘部分不會被更新。 – 2013-05-02 16:10:44

+0

這是衝突的代碼:File.WriteAllText(saveFileDialog1.FileName,fileContents); File.WriteAllLines(saveFileDialog1.FileName,System.IO.File.ReadLines(connectionString).Take(110)); – 2013-05-02 16:11:11

0

「我想創建一個新的文件,只有前100行」

與原始模型保持一致,這裏有一個方法,以保持只是第100行:

 int LinesToKeep = 100; 
     using (StreamReader reader = new StreamReader(sqlConnectionString)) 
     { 
      using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName)) 
      { 
       for (int i = 1; (i <= LinesToKeep) && ((line = reader.ReadLine()) != null); i++) 
       { 
        writer.WriteLine(line); 
       } 
      } 
     } 

「我真正的要求是,我必須從行110刪除到201」

因此,複製文件,但跳過行110到201?

 int currentLine = 0; 
     using (StreamReader reader = new StreamReader(sqlConnectionString)) 
     { 
      using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName)) 
      { 
       while ((line = reader.ReadLine()) != null) 
       { 
        currentLine++; 
        if (currentLine < 110 || currentLine > 201) 
        { 
         writer.WriteLine(line); 
        } 
       } 
      } 
     }