سؤال

لدي برنامج أحتاج إلى تشغيله ضمن نظام *nix وwindows.نظرًا لأن البرنامج يأخذ مسارات الملفات من الملفات، فإن المشكلة هي ما يجب فعله حيال ذلك \ ضد / مشكلة.

فكرتي الحالية هي وضع تعبير عادي يحول الخطأ إلى الصحيح اعتمادًا على النظام الذي أستخدمه.سيكون لهذا تأثير السماح لأي نوع بالعمل على أي من النظامين.وبصرف النظر عن حقيقة ذلك الآن لدي مشكلتين, ، هل يرى أحد أي مشاكل أخرى؟

(الحلول الأخرى الأفضل هي موضع ترحيب كبير)

يحرر:المشكلة الأساسية هي جعل مسارات Windows تعمل على نظام التشغيل Unix وليس العكس.

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

المحلول

ومعتمد من / الكامل في Win32 أيضا.

وانظر أيضا هذا سؤال فيما يتعلق

نصائح أخرى

سوف

ويندوز استعرض عموما إما \ أو /، وذلك على توحيد / قد تجعل مشكلتك أبسط ما دام لديك سيطرة كاملة على أسماء الملفات.

هل تعتبر خلق طبقة "مدير الملفات" التي من شأنها التعامل مع جميع القضايا ملف تحديد المسارات بالنسبة لك؟ بهذه الطريقة في تطبيق البريد الخاص بك، عندما كنت تحميل ملف البيانات، يمكنك الاتصال شيء من هذا القبيل.

LoadApplicationData(FileManager.GetDataFilePath)

وبعد ذلك سوف مدير الملفات للكشف عن البيئة التي هو في والعودة الخيار مسار الملف المناسب. وبهذه الطريقة يمكنك أيضا استيعاب ل Win32 مقابل يونكس معايير locatio (مثل ملفات البرنامج مقابل / البيرة أو أيا كان) كذلك.

لاحظ أن مسارات Win32 ومعقدة عند النظر أحرف محركات الأقراص (لا التناظرية على يونيكس) و "الشوك" خاص (ماك قبل X المدى - كذلك لا التناظرية على يونيكس بشكل عام، على الرغم من ماك X لديها منهم - مفاجأة، مفاجأة ) التي يمكن أن تقدمها. كن حذرا.

وإنشاء محلل لإدخال لإنشاء بنية شجرة العقد يمثل الدلائل. ثم يمكنك 'حفظ' عن طريق المشي الشجرة وكتابة كل ما تريد المحددات أو اختياريا القيام بأشياء مختلفة، مثل فحص حالة وجود دليل أو كتابة الملفات الفوقية. هذا هو في الواقع شيء أنا مجرد التفكير الآن سيكون مفيدا لطلبي الخاص: -)

وأنت لم تذكر ما هي اللغة التي تستخدم، لذلك أنا ذاهب لنفترض بأنانية C / C ++. تعزيز ، إذا كنت على استعداد لاستخدامها، لديها <لأ href = "HTTP: //www.boost كافيه / وثيقة / يبس / 1_37_0 / يبس / الملفات / وثيقة / ملف index.htm "يختلط =" نوفولو noreferrer "> مكتبة الملفات . بطبيعة الحال، إذا كنت تستخدم لغة ديناميكية والمكتبات التجريد FS ربما بالفعل توجد هناك أيضا (على سبيل المثال في بيرل، ملف :: المواصفات هو المعيار جدا).

لم تخبرنا بنوع الملفات التي تقرأ المسارات منها.سأفترض أنها ملفات التكوين.في هذه الحالة، هناك العديد من الطرق، الإجابة الصحيحة هي تصميم برنامجك لتجنب التلاعب بالمسارات، إن أمكن.لقد نشرت إجابة هنا: https://stackoverflow.com/a/40980510/2345997 وهو أمر ذو صلة.

طرق:

  1. أضف خيار سطر الأوامر الذي يسمح للمستخدم بتحديد المسار المعني بدلاً من قراءته من ملف التكوين.
  2. أضف خيار سطر الأوامر حتى يتمكن المستخدم من تحديد المسار الأساسي.سيتم تفسير المسارات الموجودة في ملف التكوين على أنها موجودة ضمن هذا المسار الأساسي.
  3. قم بتقسيم ملف التكوين الخاص بك إلى ثلاثة.سيكون أحد الملفات به تكوين عبر الأنظمة الأساسية، بينما سيكون الملف الآخر به تكوين Windows فقط، والملف النهائي سيكون له تكوين Linux فقط.ومن ثم يمكن للمستخدم تحديد المسار الصحيح لكل من نظامي التشغيل Windows وLinux.في نظام التشغيل Windows، سيقرأ برنامجك ملف التكوين عبر الأنظمة الأساسية وملف التكوين الخاص بنظام التشغيل Windows فقط.في Linux، سيتم قراءة الملف عبر الأنظمة الأساسية وملف التكوين Linux فقط.
  4. أضف المعالجة المسبقة إلى تحليل ملف التكوين الخاص بك.سيسمح لك هذا بالحصول على ملف تكوين واحد يمكن للمستخدم من خلاله جعل برنامجك يتجاهل بعض الأسطر الموجودة في الملف اعتمادًا على نظام التشغيل الذي يعمل عليه البرنامج.ولذلك، سيكون المستخدم قادراً على تحديد المسار إلى الملف مرتين.مرة واحدة لنظام التشغيل Linux ومرة ​​لنظام التشغيل Windows.
  5. قم بتغيير التصميم بحيث تكون الملفات موجودة دائمًا في نفس الدليل الذي يوجد به الملف القابل للتنفيذ - ثم يحدد المستخدم فقط أسماء الملفات في ملف التكوين بدلاً من المسارات إلى الملفات.
  6. استخدم وظيفة بسيطة تقوم بتحويل "/" إلى "\".ثم قم بتوثيق المستخدم بأنه يجب عليه تحديد المسارات كمسارات Linux وسيتم تطبيق هذا التحويل على النوافذ.
  7. قم بإنشاء لغة مصغرة للمسار الخاص بك لهذا الغرض وقم بتوثيقها للمستخدم.على سبيل المثال:"/" - يحدد فاصل الدليل، {root} - يمتد إلى جذر نظام الملفات، {cwd} - يمتد إلى الدليل الحالي، {app} - يمتد إلى المسار إلى التطبيق الخاص بك وما إلى ذلك...ثم يمكن للمستخدم تحديد مسارات الملفات مثل:{root}/myfiles/bob.txt على كلا النظامين الأساسيين.
  8. ستعمل بعض المسارات على كلا النظامين الأساسيين.على سبيل المثال:المسارات النسبية مثل ../my files/bill.txt.قم بتقييد تطبيقك للعمل مع هذه المسارات فقط.قم بتوثيق هذا القيد وكيفية تعامل التطبيق الخاص بك مع المسارات إلى المستخدم.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top