2017-02-19 17 views
0

ログファイルのコード内で起こっているすべてのことを書き留める予定のアプリケーションがあります。そこで私はFileCreationという名前のwpfプロジェクトを作成しました。ここでは単にファイルを作成してからデータを追加しています。また、アプリケーションの起動時にデータを保存したいと思っています。され、次のコード:上記のコードではそうエラー:コンストラクタの呼び出し

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Log("Application started on : " + DateTime.Now.ToString("dd-M-yyyy")); 
    } 

    void Log(string data) 
    { 
     string path = @"C:\\Logs\\" + DateTime.Now.ToString("dd-M-yyyy") + ".txt"; 

     if (File.Exists(path)) 
     { 
      using (StreamWriter sw = File.AppendText(path)) 
      { 
       sw.WriteLine(data); 

      } 
     } 
     else 
     { 
      StreamWriter myFile = new StreamWriter(path); 
      myFile.WriteLine(data); 
      myFile.Close(); 


     } 
    } 
} 

、私は、パラメータとして文字列データを受け付ける関数Logを作成しました。ファイルが作成されていない場合はファイルを作成し、ファイルにデータを追加します。私はまた、アプリケーションが開始されたときに記録したいので、私もそれを書くことを考えました。したがって、InitializeComponent();の後にLog()が含まれています。これは、アプリケーションの起動時に最初に初期化されるものだと思います。しかし、それはエラーの下に私を与えている:

enter image description here

を、私はそれを開始するにため、このエラーが来ている理由を知っていることはLog()機能が何であるかを知りませんでした。しかしそれをどこで定義するのか。私も1つの質問があります。私は自分のシステムで最初にテストしていましたが、完全に動作していました。私が他のシステムでそれをテストしたとき、それだけが私にこのエラーを与えました。

なぜ私のシステムでこのエラーが表示されませんでしたか?

私のコードでどのように処理できますか?

+0

内部例外はありますか? –

+0

@ YacoubMassadそれをチェックする方法? –

+0

ビジュアルスタジオでアプリケーションをデバッグすることはできますか?デバッグ時には、内部例外を含む例外の詳細を表示することができます。 –

答えて

1

ドライブC:\に書き込む権限がありません。またはディレクトリC:\Logs\が存在しません。必ずこれらはでDebug.Windowsメニュー例外の設定を開いて、すべてのチェックボックスをチェックし、問題やないですようにするために

この例外は、未処理例外のためにMainWindowコンストラクタの初期化が失敗したことを示しています。また、例外ウィンドウのInnerException部分をチェックして、コードに何が問題なのかを確認することもできます。

あなたはあなたのメインウィンドウでInitializeComponent();行の前に、たとえば、Dispatcher.UnhandledException方法を処理する必要があり

How can I handle it in my code

編集。これを行うに書き込むには:

void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) 
    { 
     ShowError("An application error occurred.\nPlease check whether your data is correct and repeat the action. If this error occurs again there seems to be a more serious malfunction in the application.", e.Exception); 

     e.Handled = true; 
    } 

では、あまりにも内部例外を印刷しようとしますShowError::次のような方法が必要です

Dispatcher.UnhandledException += OnDispatcherUnhandledException; 

public static void ShowError(string message, Exception exp0) 
    { 
     Exception exp1 = exp0.InnerException; 
     Exception exp2 = exp1 != null ? exp1.InnerException : null; 
     Exception exp3 = exp2 != null ? exp2.InnerException : null; 

     string mess = "unfortunately, no message is available."; 
     string moremess = ""; 

     if (message != null) 
     { 
      mess = message; 
      moremess = exp0.Message + "\n\n"; 
     } 
     else if (exp0 != null) 
     { 
      mess = exp0.Message; 
     } 

     Exception exp = exp0.InnerException; 
     while (exp != null) 
     { 
      moremess += exp.Message + "\n\n"; 
      exp = exp.InnerException; 
     } 

     MessageBox.Show(mess + Environment.NewLine + moremess); 
    } 

はそれがお役に立てば幸いです。

+0

これを参照してください。[Visual Studio 2015の例外設定に関するリンク](https://blogs.msdn.microsoft.com/visualstudioalm/2015/02/23/the- new-exception-settings-window-in-visual-studio-2015 /) – Ron

関連する問題