| 

.NET C# Java Javascript Exception

2
Ich habe eine kleine Bibliothek geschrieben die Daten zum Cachen in eine Datei schreibt (ist nicht der Hauptzweck sondern nur ein Nebenprodukt). Im Hauptprojekt (ein ASP.NET Projekt) würde ich die Datei mit MapPath in ein bestimmtes Verzeichnis legen.

Da die Library aber unabhängig vom Hauptprojekt sein soll, will ich nicht mit dem Server.MapPath arbeiten - was ja bei normalen Applikation nicht genutzt wird. Zum Entwickeln habe ich einfach einen Unterordner des aktuelle Arbeitsverzeichnisses genutzt.

Meine Frage ist nun wo und wie man diese Daten idealerweise ablegt? Und zwar so, dass sowohl eine normale Anwendung als auch eine Webanwendung damit klar kommt. Wer hat hier eine Empfehlung oder kennt eine best practice?

Da die Daten Benutzerspezifisch sind, sollten sie nicht zentral in c:\temp o.ä. gespeichert werden, wo sie jeder User auslesen kann oder sich mehrere Instanzen der Anwendung in die Quere kommen.
News:
14.02.2010
Vash 440 2 6
4 Antworten
4
In dem in der Umgebungsvariable
%TEMP%
gespeicherten Verzeichnis.
14.02.2010
reneroger 41 1
Absolut richtig.
Genau dafür ist diese Umgebungsvariable da.
klaus_b 15.02.2010
2
Die Variable ist auch Benutzerspezifisch, da im Normalfall auf ein Verzeichnis unterhalb des Userprofile-Verzeichnisses zugegriffen wird. Es sei denn es hat jemand dran rum gefummelt ;-)
Blue 15.02.2010
1
Benutzerspezifisch ist ja genau richitg. Bei ASP.NET ist es in der Regel immer der selbe User und bei Winforms ist es der einzige richtige Ort.
GENiALi 16.02.2010
2
Ich habe mich für eine Mischvariante entschieden. Damit man das Verzeichnis zur Not noch "verlegen" kann, lässt es sich in der web.config als aus der app.config mit dem gleichen Codeschnipsel auslesen. Als Fallback dient wie bereits erwähnt die Umgebungsvariable.

this.cacheDirectory = ConfigurationSettings.AppSettings["CacheDirectory"] ?? Environment.GetEnvironmentVariable("TEMP");
16.02.2010
Vash 440 2 6
Du musst aber unbedingt darauf achten, dass ASP.NET Schreibrechte für das angegebenen Verzeichnis besitzt.
klaus_b 17.02.2010
Ja, das sollte man dazu sagen. Im normalen Arbeitsverzeichnis hat es offensichtlich keinen Schreibzugriff wie ich gerade ausprobiert habe - was wie ich glaube ein Windowsordner ist - das hätte ich eigentlich auch nachgucken können, aber ich muss nun ins Bett :).
Vash 17.02.2010
1
Im IO-Namespace gibt es für das Auffinden des Temporären Verzeichnisses schon eine extra statische Methode die auch noch gleich einen Fallback eingebaut hat wenn es einen Tempordner nicht geben sollte.
string tmp = Path.GetTempPath();

Fallback:
This method checks for the existence of environment variables in the following order and uses the first path found:

The path specified by the TMP environment variable.

The path specified by the TEMP environment variable.

The path specified by the USERPROFILE environment variable.

The Windows directory.
15.05.2010
schulz3000 390 1 6
0
Ich verwende für temporäre Dateien das LoculUserAppDataPath-Verzeichnis und lege darin einen Ordner temp an:

public static string GetTempDirectory()
{
string path = Application.LocalUserAppDataPath;
if (!path.EndsWith("\"))
{
path = String.Concat(path, "\");
}
path = String.Concat(path, "temp\");
Directory.CreateDirectory(path);
return path;
}
06.04.2010
DerKleineNils 79 1 1 5
...ist möglich, würde ich aber nicht empfehlen. Im Standardfall ist das genau das gleiche wie %TEMP%, wenn allerdings jemand seinen Temp-Path ändert, legt man damit, für den Nutzer nicht änderbar, einen weiteren Temp-Ordner an. Machen das 10 Programme mit evtl abweichenden Namen, hat man 10 verschiedene Temp-Ordner. Da kommt freude auf ;o)
Blue 08.04.2010
Ich wuerde anstatt des path.EndsWith Kram eher die Variante

path = Path.Combine(path, "temp")
Empfehlen. viel kuerzer und einfacher :)
Booser 14.05.2010

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH