Jadi saya memiliki proyek web, dan saya mencoba untuk mendapatkan direktori root dari situs web tersebut menggunakan metode c # Directory.GetCurrentDirectory()
. Saya tidak ingin menggunakan jalur statis karena lokasi file akan berubah di masa mendatang. Metode ini berjalan di file imageProcess.aspx.cs saya, tetapi di mana saya pikir itu akan kembali:
C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs
Saya malah mendapatkan:
C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\
Adakah yang bisa menjelaskan mengapa ini terjadi dan apa solusi yang mungkin? Terima kasih banyak.
Jawaban:
Direktori saat ini adalah fitur tingkat sistem; itu mengembalikan direktori tempat server diluncurkan. Ini tidak ada hubungannya dengan situs web.
Kamu mau
HttpRuntime.AppDomainAppPath
.Jika Anda berada dalam permintaan HTTP, Anda juga dapat menelepon
Server.MapPath("~/Whatever")
.sumber
HttpRuntime.BinDirectory
, tetapi itu mudah ditentukan di debugger, begitu saya mencoba apa yang Anda sebutkan dalam jawaban Anda.Server.MapPath
dilakukannya. Anda ingin stackoverflow.com/q/5823847/34397System.Web.HttpRuntime.AppDomainAppPath
danSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
HttpContext
adalahSystem.Web.HttpContext.Current.Server.MapPath("~")
, tidak punyaHttpRuntime
Gunakan kode ini:
Referensi Terperinci:
Server.MapPath
menentukan jalur relatif atau virtual untuk dipetakan ke direktori fisik.Server.MapPath(".")
mengembalikan direktori fisik saat ini dari file (misalnya aspx) yang sedang dijalankanServer.MapPath("..")
mengembalikan direktori indukServer.MapPath("~")
mengembalikan jalur fisik ke root aplikasiServer.MapPath("/")
mengembalikan jalur fisik ke root nama domain (tidak harus sama dengan root aplikasi)Sebuah contoh:
Misalkan Anda mengarahkan aplikasi situs web ( http://www.example.com/ ) ke
dan menginstal aplikasi toko Anda (sub web sebagai direktori virtual di IIS, ditandai sebagai aplikasi) di
Misalnya, jika Anda memanggil
Server.MapPath
permintaan berikut:kemudian:
Jika Path dimulai dengan garis miring (/) atau garis miring ke belakang (),
MapPath
metode akan mengembalikan jalur seolah-olah Path adalah jalur virtual penuh.Jika Path tidak dimulai dengan garis miring,
MapPath
metode tersebut mengembalikan jalur yang berhubungan dengan direktori permintaan yang sedang diproses.Catatan: di C #, @ adalah operator string literal verbatim yang berarti bahwa string harus digunakan "sebagaimana adanya" dan tidak diproses untuk escape sequence.
Catatan kaki
Server.MapPath(null)
danServer.MapPath("")
akan menghasilkan efek ini juga.sumber
System.Web.Hosting.HostingEnvironment.MapPath("~")
, yang berfungsi dengan baik, tanpa ketergantungan padaSystem.Web.HttpContext.Current