ฉันควรใช้ AppDomain.CurrentDomain.BaseDirectory หรือ System.Environment.CurrentDirectory


86

ฉันมีไฟล์ exe สองไฟล์ในโฟลเดอร์เดียวกันฉันสามารถเรียกใช้ exe2 จากปุ่มใน exe1 วันนี้ฉันสังเกตเห็นลูกค้าในเซสชันรีโมต (บริการเทอร์มินัล) และ exe2 ล้มเหลวในการเรียกใช้ข้อผิดพลาด 'ไม่พบไฟล์' แต่ exe1 อยู่ในไดเร็กทอรีเดียวกันเมื่อเราตรวจสอบ ดังนั้นผมควรจะใช้AppDomain.CurrentDomain.BaseDirectoryหรือSystem.Environment.CurrentDirectory ?

ขอบคุณ


@Jade M คุณกำลังดำเนินการ exe1 ที่ terminal อย่างไร?
Ms. Sonia

ฉันต้องการเพิ่มสองเซ็นต์ของฉันโดยบอกว่าstring.GetFullPath(path)ใช้Environment.CurrentDirectoryแทนCurrentDomain.BaseDirectoryความประหลาดใจของฉัน
JBSnorro

คำตอบ:


185

หากคุณต้องการค้นหาไฟล์ในไดเร็กทอรีเดียวกับแอปพลิเคชันของคุณAppDomain.CurrentDomain.BaseDirectoryเป็นตัวเลือกที่ถูกต้อง

Environment.CurrentDirectoryเป็นค่าที่สามารถและจะเปลี่ยนแปลงตลอดกระบวนการเรียกใช้แอปพลิเคชันของคุณ ตัวอย่างเช่นการใช้พารามิเตอร์เริ่มต้น OpenFileDialog ใน WinForms จะเปลี่ยนค่านี้เป็นไดเร็กทอรีที่ไฟล์ถูกเลือก


ฉันใช้ button1 เพื่อแสดง OpenFileDialog จากนั้น button2 เพื่อแสดง Environment.CurrentDirectory แต่ยังคงแสดงโฟลเดอร์ debug ทำไม?
Lei Yang

18

AppDomain.CurrentDomain.BaseDirectoryส่งคืนไดเร็กทอรีจากที่โหลดโดเมนแอ็พพลิเคชันปัจจุบัน
System.Environment.CurrentDirectoryส่งคืนไดเร็กทอรีระบบปัจจุบัน
ในกรณีของคุณAppDomain.CurrentDomain.BaseDirectoryเป็นทางออกที่ดีที่สุด


1
เพื่อความชัดเจน System.Environment.CurrentDirectory จะส่งคืนไดเร็กทอรีการทำงานปัจจุบัน (เฉพาะกระบวนการ)
Oskar Berggren

14

คุณควรใช้AppDomain.CurrentDomain.BaseDirectory.

ตัวอย่างเช่นในแอปพลิเคชันบริการ windows:

System.Environment.CurrentDirectoryจะส่งคืนC: \ Windows \ system32

ในขณะที่

AppDomain.CurrentDomain.BaseDirectory จะส่งคืน [ตำแหน่ง Application.exe]

ปัจจัยสำคัญอีกประการที่ควรทราบคือAppDomain.CurrentDomain.BaseDirectoryเป็นคุณสมบัติแบบอ่านอย่างเดียวในขณะที่Environment.CurrentDirectoryอาจเป็นอย่างอื่นได้หากจำเป็น:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   


3

ในโครงการทดสอบ Visual studio 2010 ถ้าคุณเปิดใช้งานตัวเลือกการปรับใช้ของแก้ไขการตั้งค่าการทดสอบ AppDomain.CurrentDomain.BaseDirectory จะชี้ไปที่โฟลเดอร์ TestResults \ Out (ไม่ใช่ bin \ debug) แม้ว่าการตั้งค่าเริ่มต้นจะชี้ไปที่โฟลเดอร์ bin \ debug

ที่นี่ฉันพบคำตอบที่น่าเชื่อถือ

ทำไม AppDomain.CurrentDomain.BaseDirectory ไม่มี "bin" ในแอป asp.net


2

ฉันมักจะใช้สิ่งที่ชอบ:

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");

2

ฉันก็ผ่านมาสองสามวันแล้วเหมือนที่ฉันใช้

Environment.CurrentDirectory

เนื่องจากมันทำให้ฉันมีปัญหากับเซิร์ฟเวอร์ที่ใช้งานจริง แต่ก็ทำงานได้ดีกับเซิร์ฟเวอร์ภายในของฉัน

ดังนั้นฉันจึงลองด้วย

System.AppDomain.CurrentDomain.BaseDirectory;

และมันใช้ได้ผลกับฉันทั้งในสิ่งแวดล้อม

ดังที่พวกเขากล่าวมาเราควรไปด้วยเสมอ

System.AppDomain.CurrentDomain.BaseDirectory;

ในขณะที่ตรวจสอบไดเรกทอรีโดเมนปัจจุบันสำหรับเส้นทาง

ดูข้อมูลเพิ่มเติม

ไม่พบส่วนหนึ่งของข้อผิดพลาดเส้นทางบนเซิร์ฟเวอร์

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