2016-09-16 57 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變量指向TH e目錄,因此您應該使用Directory.Exists而不是File.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(); 
};