Nie można użyć Server.MapPath

111

Co muszę zrobić, żeby Server.MapPathzadziałało?
mamusing System.Web;

co jeszcze? Kiedy piszę, Servernie ma opcji szybkiego wyszukiwania wyników (intelli-sense) dla Server.

Jakaś pomoc?

a1204773
źródło
1
Musisz podać więcej informacji. Co to za projekt? Dlaczego chcesz uruchomić Server.MapPath? Czy to jest projekt formularzy sieci Web i czy piszesz kod w podklasie Page, czy w funkcji renderowania ASPX?
Dai
C # Winforms .. Chcę, aby sprawdził dostępność plików na serwerze
a1204773

Odpowiedzi:

286

możesz spróbować tego użyć

    System.Web.HttpContext.Current.Server.MapPath(path);

albo użyj HostingEnvironment.MapPath

    System.Web.Hosting.HostingEnvironment.MapPath(path);
DotNetUser
źródło
1
Nie działają ... Błąd 1 Nazwa typu lub przestrzeni nazw „HttpContext” nie istnieje w przestrzeni nazw „System.Web” (czy brakuje odwołania do zestawu?) ... Błąd 2 Nazwa typu lub przestrzeni nazw „Hosting” nie istnieje w przestrzeni nazw „System.Web”
a1204773
wygląda na to, że używasz winforms, możesz zobaczyć ten link, a następnie debugging.com/bug/18951
DotNetUser
4
Ja też, HostingEnvironment.MapPath działał i używam go poza kontrolerem.
Łukasz
Przede wszystkich potrzeb projektowych odwołać System.Web.dll i będzie działać
ihebiheb
Jak uzyskać odczytanie pliku znajdującego się w tym katalogu „~ / AppData / Roaming”?
Murlidhar Fichadia
14

Twój projekt musi odnosić się do zestawu System.Web.dll. Serwer jest obiektem typu HttpServerUtility. Przykład:

HttpContext.Current.Server.MapPath(path);
Leandro Gomide
źródło
3
Nie mogę znaleźć takiego odniesienia, znalazłem tylko te dwa: System.Web.ApplicationServices, System.Web.Services ....
a1204773
4

System.Web.HttpContext.Current.Server.MapPath("~/") daje null, jeśli wywołasz to z wątku.

Więc spróbuj użyć

System.Web.Hosting.HostingEnvironment.MapPath("~/")

Ravindra Singh Chhabra
źródło
1

Najpierw dodaj odniesienie do System.web, jeśli nie masz. Zrób to w Referencjach folderze .

Możesz wtedy użyć Hosting.HostingEnvironment.MapPath(path);

jdisla
źródło
1
bool IsExist = System.IO.Directory.Exists(HttpContext.Current.Server.MapPath("/UploadedFiles/"));
if (!IsExist)
    System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath("/UploadedFiles/"));

StreamWriter textWriter = File.CreateText(Path.Combine(HttpContext.Current.Server.MapPath("/UploadedFiles/") + "FileName.csv"));
var csvWriter = new CsvWriter(textWriter, System.Globalization.CultureInfo.CurrentCulture);
csvWriter.WriteRecords(classVM);
user13048334
źródło
Odpowiedzi zawierające tylko kod są uważane za niskiej jakości: pamiętaj, aby wyjaśnić, co robi Twój kod i jak rozwiązuje problem. Pomoże to pytającemu i przyszłym czytelnikom, jeśli możesz dodać więcej informacji w swoim poście. Zobacz Wyjaśnianie odpowiedzi opartych wyłącznie na kodzie
Calos,
0

Spróbuj dodać System.Webjako odniesienie do swojego projektu.

jabu.hlong
źródło
0

Wiem, że ten post ma kilka lat, ale ja dodam tę linię na początek twojej klasy, a nadal będziesz mógł korzystać z serwera.

Dim Server = HttpContext.Current.Server

lub możesz zrobić funkcję

Public Function MapPath(sPath as String)
    return HttpContext.Current.Server.MapPath(sPath)
End Function

Chodzi mi o to, żeby wszystko było łatwiejsze. Dodałem go również do mojej klasy Utilities, na wypadek, gdybym znów się z tym spotkał.

Guy Cothal
źródło