ฉันจะทราบได้อย่างไรว่าไดเรกทอรีใดที่แอปคอนโซลของฉันทำงานด้วย C #
ฉันจะทราบได้อย่างไรว่าไดเรกทอรีใดที่แอปคอนโซลของฉันทำงานด้วย C #
คำตอบ:
ในการรับไดเร็กทอรีที่เป็นไฟล์. exe:
AppDomain.CurrentDomain.BaseDirectory
ในการรับไดเร็กทอรีปัจจุบัน:
Environment.CurrentDirectory
System.AppContext.BaseDirectory
.
ขึ้นอยู่กับสิทธิ์ที่มอบให้กับแอปพลิเคชันของคุณไม่ว่าการคัดลอกเงาจะมีผลหรือไม่และตัวเลือกการเรียกใช้และการปรับใช้อื่น ๆ วิธีการต่างๆอาจได้ผลหรือให้ผลลัพธ์ที่แตกต่างกันดังนั้นคุณจะต้องเลือกอาวุธของคุณอย่างชาญฉลาด ต้องบอกว่าสิ่งต่อไปนี้ทั้งหมดจะให้ผลลัพธ์เดียวกันสำหรับแอปพลิเคชันคอนโซลที่เชื่อถือได้อย่างสมบูรณ์ซึ่งดำเนินการภายในเครื่องที่มันอยู่:
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 );
คุณจะต้องศึกษาเอกสารของสมาชิกข้างต้นเพื่อดูการอนุญาตที่แน่นอนที่จำเป็น
Path.GetDirectoryName (Assembly.GetExecutingAssembly () ตำแหน่งที่ตั้ง)
ใน. NET คุณสามารถใช้System.Environment.CurrentDirectory
เพื่อรับไดเร็กทอรีที่กระบวนการเริ่มต้น
System.Reflection.Assembly.GetExecutingAssembly().Location
จะบอกตำแหน่งของแอสเซมบลีที่กำลังดำเนินการอยู่ (ซึ่งน่าสนใจก็ต่อเมื่อโหลดแอสเซมบลีที่กำลังดำเนินการอยู่ในปัจจุบันจากที่อื่นที่แตกต่างจากตำแหน่งของแอสเซมบลีที่กระบวนการเริ่มต้น)
บน windows (ไม่แน่ใจเกี่ยวกับ Unix เป็นต้น) เป็นอาร์กิวเมนต์แรกใน commandline
ใน C / C ++ firts item ใน argv *
WinAPI - GetModuleFileName (NULL, ถ่าน *, MAX_PATH)
สมมติว่าชื่อโปรเจ็กต์แอปพลิเคชันคอนโซล. 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 \
ใช้AppContext.BaseDirectory
สำหรับ. net5