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?


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);

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);

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("~/")


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);


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);

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

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ł.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.