我有一個類庫,部署在ISP服務器上供ASP.NET Web服務使用。我想跟蹤任何錯誤,在這種情況下,我無法訪問Windows事件日誌。所以我想我會使用StreamWriter類寫入一個txt文件。問題是如果我不給絕對路徑,而只是試圖寫入C:\ Windows \ System32的文件名,那對我來說就沒有好處。 如何告訴它可能使用數據目錄或應用程序根目錄?有什麼想法嗎?C#類庫:StreamWriter寫入system32文件夾
回答
這裏是我以前用的,這是一個有點笨拙,但它能夠完成任務:
using System;
using System.Collections.Generic;
using System.Web.UI;
public static class Logger
{
private static readonly Page Pge = new Page();
private static readonly string Path = Pge.Server.MapPath("~/yourLogPath/Log.txt");
private const string LineBreaker = "\r\n\r======================================================================================= \r\n\r";
public static void LogError(string myMessage, Exception e)
{
const LogSeverity severity = LogSeverity.Error;
string messageToWrite = string.Format("{0} {1}: {2} \r\n\r {3}\r\n\r {4}{5}", DateTime.Now, severity, myMessage, e.Message, e.StackTrace, LineBreaker);
System.IO.File.AppendAllText(Path, messageToWrite);
}
}
我有這個類在它自己的項目,從網站本身分開,和我用它在我的所有其他非網站項目......
編輯: 順便說一句LogSeverity只是一個枚舉我編了......
嘗試檢查出來:
Application.StartupPath;
這裏有一個link to the docs
獲取可執行文件 啓動應用程序,而不是 包括可執行文件名的路徑。
string path = Application.StartupPath;
注意:您仍然需要添加一個文件名。
我不能從一個類庫訪問System.Windows.Forms.Application.StartupPath應用程序,我可以嗎? – 2010-09-29 19:44:37
是的,右鍵單擊引用並導入System.Windows.Forms – 2010-09-29 20:27:10
你可以這樣做找出你的可執行文件的路徑:
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
當我嘗試在我的本地託管解決方案時,我在\ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ ..中獲得了一個路徑真的不是我所追求的。 – 2010-09-29 19:40:18
啊我的不好,這不適用於ASP.NET web服務。使用Server.MapPath方法。儘管如此,您仍然需要對目標文件夾的寫入權限。 – BrokenGlass 2010-09-29 19:49:01
在我的網絡產品,在web.config我指定的appSettings塊這樣的:
<configuration>
<appSettings>
<add key="MyLogPath" value="LogPath" />
</appSettings>
</configuration>
這你可以使用從代碼如
ConfigurationManager.AppSettings["MyLogPath"]
然後你可以讓安裝程序配置它,無論你在哪裏想。您可能不希望日誌文件在您的應用程序目錄中。
是的,但我需要類庫DLL來登錄,而不是網絡產品。 – 2010-09-29 19:41:31
你也可以在你的類庫項目中添加一個app.config來實現這個 – EJC 2010-09-29 20:09:24
我仍然可以使用相對於應用程序的路徑嗎?我真的不想使用安裝程序,只需複製/發佈到ISP給我的虛擬目錄即可。 – 2010-09-29 20:14:48
使用Server.MapPath
獲取相對於Web應用程序的路徑。
using (FileStream fs = new FileStream(Server.MapPath("~/logs/logfile.txt"),
FileMode.Append)) {
//do logging here.
}
雖然以前的一些海報都使用反射來得到執行大會的建議,我不知道是否這將加快您的Web應用程序或w3wp進程。如果是後者,您仍然會嘗試寫入System32文件夾。
- 1. C#StreamWriter,寫入不同類的文件?
- 2. C#StreamWriter未寫入文件
- 3. 將文件流寫入StreamWriter中c#
- 4. C#StreamWriter寫入不正確
- 5. Java Windows7 System32文件夾java.exe
- 6. 爲什麼在system32文件夾中找不到C#庫?
- 7. 如何使用StreamWriter寫入文件?
- 8. 使用StreamWriter和FileStream寫入txt文件
- 9. 如何使用StreamWriter寫入csv文件?
- 10. 的StreamWriter寫入現有文件
- 11. VB - 使用StreamWriter寫入文件
- 12. 使用Streamwriter寫入現有文件
- 13. 使用C#中的Streamwriter寫入文本文件時出錯#
- 14. 爲什麼StreamWriter無法在c#中將文本寫入文件?
- 15. 什麼是思傑\ System32文件夾,它是如何從System32文件夾
- 16. 寫入用戶文檔文件夾C++
- 17. asp.net窗體輸出:streamwriter寫入文件與數據庫連接
- 18. StreamWriter寫入雙向.txt文件時出現問題(C++)
- 19. C#StreamWriter - 何時將流物理寫入文件?
- 20. c# - Streamwriter類
- 21. C#從XML寫入文件夾
- 22. 在C:\文件夾中寫入PDF
- 23. StreamWriter MVVM C#寫入變量地址?
- 24. 寫入c文件夾中的子文件夾#
- 25. 合併多個文本文件 - StreamWriter不寫入一個文件?
- 26. 微星安裝程序,64位操作系統,寫入\ windows \ system32 \ inetsrv文件夾
- 27. Windows 7中的System32文件夾
- 28. 添加對Windows System32文件夾中的.NET庫的引用
- 29. StreamWriter在寫入文本文件時截斷文本
- 30. C:\ Windows \ System32 \ GroupPolicyUsers下的文件夾與Directory.Create創建不顯示
是的,只要你添加一個引用System.Web程序集 – 2010-09-29 20:30:47
就像我說的,有點笨重,但它完成工作。 :)也許我說了很多笨蛋...... – EJC 2010-09-29 20:42:28