2016-06-02 14 views
1

ファイル(fileName)をフォルダコールバックアップにコピーしようとしています。ファイルがバックアップフォルダに正常にコピーされると、modifySQLFile()はバックアップフォルダからファイルを読み込み、ファイルを更新し、元のファイル(fileName)を通常の場所に保持します。プログラムが2回目に実行されると、元のファイルが読み込まれ、別のコピーを作成してバックアップし、コピーしたファイルを更新して前のコピーしたファイルを上書きします。ファイルをコピー、作成、更新して元のファイルをC#に保持します

しかし、私のコードが間違っていて、既存のファイルを上書きする方法がわかりません。親切にも、私がこれを初めて知った時に私を助けてください。

public string fileName = "DEPOT-Pub_Sub_Combined (wo CardHolder).sql"; 

private void modifySQLFile() 
{ 
    CopyFile(); 

    string[] fileTexts = File.ReadAllLines(@"backup\DEPOT-Pub_Sub_Combined (wo CardHolder).sql"); 


    int counter = 0; 

    //File processing 
    foreach (string line in fileTexts) 
    { 
     //only process non-comments line 
     if (line.StartsWith("--") == false) 
     { 
      //replace instances of server name 
      if (line.Contains(SERVERNAME) == true) 
      { 
       fileTexts[counter] = fileTexts[counter].Replace(SERVERNAME, textBox1.Text);    
      } 

      if (line.Contains(ACCESSID) == true) 
      { 
       fileTexts[counter] = fileTexts[counter].Replace(ACCESSID, textBox2.Text); 
      } 

      if(line.Contains(NETWORKID) == true) 
      { 
       fileTexts[counter] = fileTexts[counter].Replace(NETWORKID, textBox2.Text); 
      } 


     } 
     counter++; 
    } 
    //update file 
    File.WriteAllLines(fileName, fileTexts); 

    MessageBox.Show("Completed!"); 
} 

private void CopyFile() 
{ 

    string targetPath = @"backup"; 
    string destFile = Path.Combine(targetPath, fileName); 

    if(!Directory.Exists(targetPath)) 
    { 
     Directory.CreateDirectory(targetPath); 
    } 

    File.Copy(fileName, destFile, true); 
} 
+0

既存のファイルを上書きする最も簡単な方法は、まず古いファイルを削除してから新しいファイルに置き換えることです。 – sorifiend

+0

あなたはあなたが見ているエラーをより詳細に記述できますか?上記のコードで –

+0

を実行すると、すべて正常に動作しますが、フォルダ内のファイルをチェックすると、そこにはありますが、バックアップフォルダには更新されません。ただし、代わりに元のファイルが更新されます。私は2回目を実行すると、何も更新されないようです。 – Stella

答えて

0

最初に問題を解決してください。 modifySQLFile()メソッドで間違ったファイルに書き込んでいます。代わりにfileName

File.WriteAllLines(fileName, fileTexts); 

destFileNameすべきは、第二に、このファイルを仮定すると(< 10メガバイト)、より良く、より簡単な方法は、メモリに元のファイルの内容を読んで内容を変更してから書くことになります巨大ではありませんそれをバックアップに入れる。 CopyFile()

+0

ちょっと感謝jeffが、私のファイルは非常に巨大です。 100行以上のSQLスクリプトを実行する – Stella

+0

100行のテキストは非常に小さいです。 10MBはおそらく100kまたはそれ以上の回線になります。 Btw、あなたのコードはすでに 'File.ReadAllLines'のようにファイルをメモリに読み込んでいます しかし、将来大容量のファイルを操作しなければならない場合は、ファイルストリームをメモリに読み込む代わりに使用してください。 –

+0

お返事ありがとうございます。=== – Stella