2017-11-26 8 views
0

テキストファイルの行を編集するコードを使用しようとしています。私は実行すると :ファイルでC#テキストファイルの行を編集できません

public static void Updateconfigfile(bool updateall, int linenotoedit) 
    { 

     if (updateall == true) 
     { 
      //update all lines of files 
      MessageBox.Show("start 1"); 
     } else 
     { 
      MessageBox.Show("start"); 
      noprojecton = 10; 

      //update only a specified line 
      //line index for file.readalllines beguins at zero 
      string updatestring = Updateconfigfilegetvalue(1); 

      string[] textfile = File.ReadAllLines(appdataconfigpath); 

      MessageBox.Show(textfile[0]); 
      textfile[0] = Updateconfigfilegetvalue(0); 
      MessageBox.Show(textfile[0]); 


      File.WriteAllLines(appdataconfigpath, textfile); 
     } 


    } 

    public static string Updateconfigfilegetvalue(int lineno) 
    { 
     //determine which line the user wants to update starts at line 0 
     //return the correct line 
     string toreturn = ""; 
     switch(lineno) 
     { 
      case 0: 
       toreturn = ("numberofprojectson: " + noprojecton); 
       return toreturn; 
      default: 
       return ""; 
     } 
    } 

テキストの現在の行が「1 numberofprojectson」を言う:私は私のコードはここ

7.ウィンドウで.NET 4.5のVisual StudioでC#を使用していますそれ、私は開始を言うメッセージが表示されます。

「1」と「10」というメッセージが表示されます。

文字列の配列形式でテキストファイルを取得していて、配列の0のインデックスを変更していますが、テキストファイルに書き込んでいません。テキストファイルには「numberofprojectson:1」と表示されています。

ファイルパスをチェックし、ブレークポイントを使用してすべてのコードが実行されていることを確認し、すべての行を実行して正しいファイルに書き込んでいます。

ご協力いただければ幸いです。

コンソール出力:

' 
'Pseudocode Writer.exe' (CLR v4.0.30319: DefaultDomain): Loaded C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
    'Pseudocode Writer.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'E:\Pseudocode Writer\Pseudocode Writer\bin\Debug\Pseudocode Writer.exe'. Symbols loaded. 
    'Pseudocode Writer.exe' (CLR v4.0.30319: Pseudocode Writer.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
    'Pseudocode Writer.exe' (CLR v4.0.30319: Pseudocode Writer.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
    'Pseudocode Writer.exe' (CLR v4.0.30319: Pseudocode Writer.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
    'Pseudocode Writer.exe' (CLR v4.0.30319: Pseudocode Writer.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
    'Pseudocode Writer.exe' (CLR v4.0.30319: Pseudocode Writer.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
    'Pseudocode Writer.exe' (CLR v4.0.30319: Pseudocode Writer.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
    Exception thrown: 'System.IO.IOException' in mscorlib.dll 
    The program '[4276] Pseudocode Writer.exe' has exited with code 0 (0x0). 

アプリケーションデータの設定・パス

public static String appdatapathprovisonal = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
appdatapath = (appdatapathprovisonal + asciicharbackslash + "Pseudocode Writer"); 
appdataconfigpath = (appdatapath + asciicharbackslash + "config.pwc"); 
public static string asciicharbackslash = (Convert.ToChar(92)).ToString(); 

92 ASCIIコードは '\' .pwcは、テキストファイル(.txt)

例外でありますコンソールにスローされました:

Exception thrown: 'System.IO.IOException' in mscorlib.dll 
+0

WriteTheFileのコードが実行された後、ファイルのパスに移動し、ファイルの更新日が変更されていることを確認し、メモ帳などのファイルを開き、ファイルの値が変更されているかどうかを確認します。私はたぶん、あなたがビジュアルスタジオでアプリケーションを実行するたびに、ファイルが元の値で上書きされているのだろうかと思っています。 –

+0

こんにちは、appdataconfigpathは私のプログラムのアプリケーションデータフォルダとそのconfig.txtファイルにつながります。私は実行後にメモ帳でチェックし、更新されていません。 –

+1

'appdataconfigpath'をどのように取得して、デバッガからの値を教えてください。私はあなたがプロジェクトフォルダではなく、ビルドされたファイルや配備されたファイルを探していると思います。 –

答えて

0

ありがとうございました。この例外は、ファイルがすでに別のプロセスで使用されている場合に発生します。私の場合は、ストリームリーダを閉じるのを忘れていたからです。したがって、このエラーが発生した場合は、そのファイルがプログラムで使用されていないことを確認してください。再度、感謝します!

0

app.configファイル(myprogram.exe.config)を実際に編集している場合は、AppSettingsを使用して削除/追加/変更する必要があります。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings.Remove(someKey); 
config.AppSettings.Settings.Add(someKey, someText); 
config.Save(ConfigurationSaveMode.Modified); 
+0

これはapp.configファイルではなく、設定を保存するためのtxtファイルです –

関連する問題