2017-12-09 6 views
0

私が必要とするのは、file1とfile2がファイル内にテキストを表示することだけです。 File1は素晴らしい作品です! File2そんなにありません。私は、file2をどのように読み込んだのか、何か問題があると考えています。私はfile2のテキストをoutputfile2という別のファイルに移動できるようにクラスを作ったので、それは動作しません。c#File1のテキストは、実行時にfile2の置き換えを続ける

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Threading.Tasks; 

namespace RandomName 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     string winDir = 
"C:/Users/RandomPerson/Desktop/RandomName/bin/Debug/"; 

     string fileName = "file1.txt"; 
     StreamReader reader = new StreamReader(winDir + fileName); 

     string outputFileName = "upperfile" + fileName; 
     StreamWriter writer = new StreamWriter(outputFileName); 

     int n = 0; 
     string st = ""; 
     string upperString = ""; 
     int n2 = 0; 
     string st2 = ""; 
     string upperString2 = ""; 



     string fileName2 = "file2.txt"; 

     StreamReader reader2 = new StreamReader(winDir + fileName2); 
     string outputFileName2 = "output" + fileName2; 
     StreamWriter writer2 = new StreamWriter(outputFileName2); 

     do 
     { 
      ++n; 
      st = reader.ReadLine(); // read one line from disk file 
      Console.WriteLine("Line #" + n + ": " + st); // write to the console 
      writer.WriteLine(st); // write line to disk file instead, using WriteLine() method 
      upperString = upperString + "\n" + st; // append each line to the big string 

     } 
     while (!reader.EndOfStream); 

     do 
     { 
      ++n2; 
      st2 = reader2.ReadLine(); // read one line from disk file 
      Console.WriteLine("Line #" + n2 + ": " + st2); // write to the 
console 
      writer2.WriteLine(st2); // write line to disk file instead, 
using WriteLine() method 
      upperString2 = upperString2 + "\n" + st2; // append each line 
to the big string 
     } 
     while (!reader2.EndOfStream); 
     reader.Close(); 
     writer.Close(); 

     Console.WriteLine("\nHere is the entire file in a string:"); 
     Console.WriteLine(upperString); 
     Console.WriteLine(upperString2); 

     UpperString b = new UpperString(upperString); 
     UpperString2 c = new UpperString2(upperString2); 

     Console.WriteLine("\nThe string in reverse case: "); 
     b.showReverseCase(); 
     Console.WriteLine("\n"); 

     c.readingFile2(); 
     c.toNewFile2(); 

    } 

} 
} 

"b"私が持っている別のクラスのためです。そのクラスのコードを "c"にコピーしました。 1つは、文字列などの名前を変更します。そして、それはうまくいかなかった。だから私は何かがメインのどこかで間違っていると思うのです。

はここで私はクラス

class UpperString2 
{ 
    private string upperString2; 

    public UpperString2() { } 

    public UpperString2(string c) { upperString2 = c; } 


    public void readingFile2() 
    { 
     string[] lines = System.IO.File.ReadAllLines("C:/Users/SomeName/Desktop/FolderName/bin/Debug/file2.txt");    

     System.Console.WriteLine("\nAnother Poem \n"); 
     foreach (string line in lines) 
     { 
      // Use a tab to indent each line of the file. 
      Console.WriteLine(line); 
     } 

    } 

    public void toNewFile2() 
    { 
     using (StreamWriter writetext = new StreamWriter("outputfile2.txt")) 
     { 
      string newText = (upperString2.ToUpper()).ToString(); 

      writetext.WriteLine(newText); 
     } 

    } 

である私は、私はそれで何とか悪かったのだと思う理由ですSteamReaderとSteamWriterに新しいビット、。私はしかし、何がわからない。 file2のテキストをfile1のテキストで上書きせずに表示させる手助けをしてくれてありがとうございました!

+0

あなたはどんなエラーを受け取っていますか? – derloopkat

答えて

0

"outputfile2"がすでにreader2で開かれていた問題がMain()にあります。

string fileName2 = "file2.txt"; 
StreamReader reader2 = new StreamReader(winDir + fileName2); 
string outputFileName2 = "output" + fileName2; //<--outputfile2.txt 
StreamWriter writer2 = new StreamWriter(outputFileName2) 

あなたはtoNewFile2()に足すために同じファイルを開こうとすると、それは例外が発生します:

public void toNewFile2() 
{ 
    using (StreamWriter writetext = new StreamWriter("outputfile2.txt")) 
    { 
     string newText = (upperString2.ToUpper()).ToString(); 

     writetext.WriteLine(newText); 
    } 
} 

オブジェクトwriter2はまだ生きているとMain()でファイルをロックしているといないがありますので、これが起こりますusing不要になったときにオブジェクトを廃棄するためのステートメント。

コードをクラスに移動したので、代わりにそのクラスを呼び出します。

関連する問題