2016-09-16 30 views
0

すべてのアプリケーション例外を含むログファイルの作成に役立つ小さなLoggerクラスを作成しましたが、実際にはこのログをApplicationData内に保存していますので、単純なクラスを作成しました:ApplicationDataフォルダに書き込むことができません

public class Logger 
{ 

    private static string _appDataPath = 
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

    private static string _logPath = _appDataPath + "\\MyApp\\Log"; 

    public static void log(string lines) 
    { 
     if (!File.Exists(_logPath)) 
     { 
      Directory.CreateDirectory(_logPath); 
     } 

     using (StreamWriter file = new StreamWriter(_logPath)) 
     { 
      file.WriteLine(lines); 
      file.Close(); 
     }; 
    } 
} 

だから、私が呼ぶとき、私は、ユーザーAppDataRoamingフォルダを使用している見ることができる方法:Logger.log("some exception message");を私はこのラインに乗る:

using (StreamWriter file = new StreamWriter(_logPath)) 

この例外:

System.UnauthorizedAccessException

は、たぶん私は、フォルダにいくつかの権限を設定する必要がありますか?または、このパスに正しくアクセスできませんか?ありがとう。

+0

ログフォルダ内のファイルや、あなたのファイルの名前であることをログに記録したいしたいですか? – sachin

+0

MyAppフォルダ内にログフォルダが必要です – Unchained

答えて

1

_logPathあなたが望むディレクトリがあるので、File.Existsの代わりにDirectory.Existsを使ってその存在をチェックする必要があります。

また、ディレクトリだけでなく、作成するファイルのパスを指定する必要があります。そこで、私のサンプルコードでは、作成するログファイルの名前を指定する変数_logFileNameを宣言しました。

これは、あなたのクラスが見えるように必要なものです:

public class Logger 
{ 
    private static string _appDataPath = 
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

    private static string _logPath = _appDataPath + "\\MyApp\\Log"; 
    private static string _logFileName = "logfile.txt"; 

    public static void log(string lines) 
    { 
     if (!Directory.Exists(_logPath)) 
     { 
      Directory.CreateDirectory(_logPath); 
     } 

     using (StreamWriter file = new StreamWriter(Path.Combine(_logPath, _logFileName))) 
     { 
      file.WriteLine(lines); 
      file.Close(); 
     }; 
    } 
} 
1

あなたのコードが作成されますという名前フォルダ

% APPDATA%\ MyAppに\ログ

もちろん、このフォルダではなくファイルであること、のStreamWriterは、フォルダ

に書き込むことはできませんコードを変更してフォルダにファイル名を追加する

if (!Directory.Exists(_logPath)) 
{ 
    Directory.CreateDirectory(_logPath); 
} 
string logFile = Path.Combine(_logPath, "myApp.Log"); 
using (StreamWriter file = new StreamWriter(logFile, true)) 
{ 
    file.WriteLine(lines); 
    file.Close(); 
}; 
関連する問題