Próbuję uzyskać bezwzględną ścieżkę niektórych plików w klasie C #. Server.MapPath
działa świetnie oczywiście dla ASPX i ich stron związanych z kodem, ale nie istnieje w innym pliku klas. Próbowałem HostingEnvironment.MapPath()
, ale to narzeka, że względna ścieżka wirtualna jest niedozwolona. jakieś pomysły?
System.Web
jest już zaimportowany.
możesz także użyć:
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")
Jeśli
var path = Server.MapPath("~/App_Data"); var fullpath = Path.Combine(path , "myfile.txt");
jest niedostępny
źródło
Nie możesz po prostu dodać odniesienia do,
System.Web
a następnie możesz użyćServer.MapPath
?Edycja: Obecnie polecam użycie
HostingEnvironment.MapPath
metody :Jest to statyczna metoda
System.Web
montażu, która mapuje wirtualną ścieżkę na ścieżkę fizyczną na serwerze. To nie wymagać odniesienia doHttpContext
.źródło
JEŚLI plik, który próbujesz pobrać, jest lokalizacją zespołu dla typu. Ale jeśli pliki są względne w stosunku do lokalizacji zestawu, możesz użyć tego z
System.IO
przestrzenią nazw, aby uzyskać dokładną ścieżkę do pliku.źródło
Ja też tego używam:
źródło
class test { public static void useServerPath(string path) { if (File.Exists(path) { \\...... do whatever you wabt } else { \\..... } }
Teraz, gdy wywołasz metodę z pliku codebehind
na przykład :
protected void BtAtualizacao_Click(object sender, EventArgs e) { string path = Server.MapPath("Folder") + "\\anifile.txt"; test.useServerPath(path); }
w ten sposób twój kod jest zbyt prosty i jedną metodą możesz używać wielu ścieżek dla każdego wywołania :)
źródło
Ten pomógł mi
//System.Web.HttpContext.Current.Server.MapPath // FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
źródło
Niezależnie od tego, czy działasz w kontekście ASP.NET, czy nie, powinieneś móc korzystać z HostingEnvironment.ApplicationPhysicalPath
źródło
Plik server.mappath („”) będzie działał na stronie aspx, jeśli chcesz uzyskać bezwzględną ścieżkę z pliku klasy, musisz użyć tego-
HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")
źródło