ฉันจะทราบได้อย่างไรว่าแอปคอนโซลของฉันกำลังทำงานอยู่ในไดเรกทอรีใด


คำตอบ:


164

ในการรับไดเร็กทอรีที่เป็นไฟล์. exe:

AppDomain.CurrentDomain.BaseDirectory

ในการรับไดเร็กทอรีปัจจุบัน:

Environment.CurrentDirectory

2
ขอบคุณ. ช่วยเมื่อ C # .exe อยู่ในโฟลเดอร์เดียว แต่ถูกเรียกใช้จากโฟลเดอร์อื่น (เช่น: เมื่ออยู่บน PATH ของระบบ)
DeepSpace101

14
สำหรับ. NET Core ก็คือSystem.AppContext.BaseDirectory.
NightOwl888

15

ขึ้นอยู่กับสิทธิ์ที่มอบให้กับแอปพลิเคชันของคุณไม่ว่าการคัดลอกเงาจะมีผลหรือไม่และตัวเลือกการเรียกใช้และการปรับใช้อื่น ๆ วิธีการต่างๆอาจได้ผลหรือให้ผลลัพธ์ที่แตกต่างกันดังนั้นคุณจะต้องเลือกอาวุธของคุณอย่างชาญฉลาด ต้องบอกว่าสิ่งต่อไปนี้ทั้งหมดจะให้ผลลัพธ์เดียวกันสำหรับแอปพลิเคชันคอนโซลที่เชื่อถือได้อย่างสมบูรณ์ซึ่งดำเนินการภายในเครื่องที่มันอยู่:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

คุณจะต้องศึกษาเอกสารของสมาชิกข้างต้นเพื่อดูการอนุญาตที่แน่นอนที่จำเป็น



3

ใน. NET คุณสามารถใช้System.Environment.CurrentDirectoryเพื่อรับไดเร็กทอรีที่กระบวนการเริ่มต้น
System.Reflection.Assembly.GetExecutingAssembly().Locationจะบอกตำแหน่งของแอสเซมบลีที่กำลังดำเนินการอยู่ (ซึ่งน่าสนใจก็ต่อเมื่อโหลดแอสเซมบลีที่กำลังดำเนินการอยู่ในปัจจุบันจากที่อื่นที่แตกต่างจากตำแหน่งของแอสเซมบลีที่กระบวนการเริ่มต้น)


1

บน windows (ไม่แน่ใจเกี่ยวกับ Unix เป็นต้น) เป็นอาร์กิวเมนต์แรกใน commandline

ใน C / C ++ firts item ใน argv *

WinAPI - GetModuleFileName (NULL, ถ่าน *, MAX_PATH)


ใช่มันเหมือนกันใน. NET ด้วย อาร์กิวเมนต์แรกเป็นพา ธ เต็มของไฟล์ปฏิบัติการเสมอ
Adam Neal

1

Application.StartUpPath;


สนใจที่จะเชื่อมโยงไปยังเอกสารบางส่วน?
John Sheehan

0

สมมติว่าชื่อโปรเจ็กต์แอปพลิเคชันคอนโซล. Net core ของคุณคือ DataPrep

รับ Project Base Directory:

Console.WriteLine(Environment.CurrentDirectory);

เอาต์พุต: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

เอาต์พุต: ~ DataPrep \


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.