سؤال

وأنا أعمل في Visual Studio 2005، وإضافة ملف النص الذي يحتاج إلى تحليل بالنقر بزر الماوس الأيمن فوق المشروع في حل اكسبلورر وإضافة -> العنصر الجديد. هذا يضع ملف txt إلى مجلد المشروع. ملف تصحيح إكس في المجلد / بن / التصحيح.

وكيف يمكنني الإشارة بشكل صحيح إلى ملف txt من التعليمات البرمجية باستخدام المسارات النسبية التي من شأنها إيجاد حل سليم كونه مجلدين الظهر، في حين حل أيضا أن تكون في نفس المجلد بعد نشر الحل؟

هل كانت مفيدة؟

المحلول

وتحقق من فئة التطبيق . لديها العديد من أعضاء والتي يمكن استخدامها لتحديد موقع الملفات، الخ النسبية للتطبيق مرة واحدة تم تثبيته.

وعلى سبيل المثال، Application.ExecutablePath يخبرك أين يقع ملف EXE الجري و هل يمكن بعد ذلك استخدام مسار نسبي للعثور على الملف على سبيل المثال .. \ .. \ FileToBeParsed.txt. ومع ذلك، وهذا يفترض أن يتم نشر الملفات في بنية المجلد نفس هيكل مجلد المشروع، وهي ليست الحال عادة.

والنظر في خصائص مثل CommonAppDataPath وLocalUserAppDataPath لتحديد موقع الملفات ذات الصلة تطبيق مرة واحدة وقد تم نشر المشروع.

نصائح أخرى

إذا فهمت سؤالك بشكل صحيح: حدد الملف في "مستكشف الحلول". ضمن خصائص -> نسخ إلى الناتج الدليل، حدد "نسخ دائما" أو "نسخ إذا الأحدث". للعمل بناء، حدد "المحتوى". هذا سوف نسخ الملف إلى مجلد / بن / التصحيح على البناء. يجب أن تكون قادرا على مرجع له من جذورها المشروع منذ ذلك الحين.

وبديل لتحديد مكان وجود الملف على القرص سيكون لتضمين الملف مباشرة في التجميع المترجمة كمورد مضمنة. للقيام بذلك، انقر بزر الماوس الأيمن على الملف واختيار "الموارد المضمنة"، كما عمل بناء. يمكنك بعد ذلك استرداد الملف ك دفق بايت:

Assembly thisAssembly = Assembly.GetExecutingAssembly();
Stream stream = thisAssembly.GetManifestResourceStream("Namespace.Folder.Filename.Ext");
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);

ومزيد من المعلومات حول الموارد المضمنة يمكن العثور هنا و <أ href ل = "http://www.devx.com/dotnet/Article/10831/0/page/2" يختلط = "نوفولو noreferrer"> هنا .

إذا كنت إنشاء تطبيق للاستخدام الخاص بك، اقتراح ديفيد Krep هو الأفضل: مجرد نسخ الملف إلى دليل الإخراج. إذا كنت بناء التجمع التي سوف تحصل على استخدامها أو توزيعها، ثم الخيار الموارد جزءا لا يتجزأ من هو الأفضل لأنه سوف حزمة كل شيء في ملف .dll واحد.

وأود أن أضيف بناء خطوة بعد أن نسخ ملف txt في مجلد الإخراج التكوين النشط:

xcopy "$(ProjectDir)*.txt" "$(OutDir)"

وهناك عدد قليل من وحدات الماكرو محددة مثل "$(ConfigurationName)"، $(ProjectDir)

والذهاب إلى خصائص المشروع -> خصائص تكوين -> تصحيح

وتعيين "دليل العمل" إلى $ (TARGETDIR)

وبعد ذلك يمكنك الرجوع صحيح الملف باستخدام مسار نسبي في التعليمات البرمجية (على سبيل المثال ".... \ foo.xml")

والحل Application.ExecutablePath لا تعمل unittests. سيتم إرجاع مسار vstesthost.exe

وSystem.Reflection.Assembly.GetExecutingAssembly (). والموقع يعمل لكن يعطي مسار مع assemblyname المدرجة.

وهكذا يعمل هذا:
System.Reflection.Assembly.GetExecutingAssembly().Location + "\..\" + "fileToRead.txt"

ولكن فقط:

fileToRead.txt

ويعمل أيضا. يبدو دليل العمل هو الدليل التجمع تنفيذ افتراضيا.

ويمكنك إضافة حدث بعد بناء لنسخ ملف txt إلى المجلد بناء الانتاج. ثم الشفرة يمكن أن نفترض أن الملف موجود في نفس المجلد مثل الملف القابل للتنفيذ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top