سؤال

وأنا باستخدام StreamWriter لتسجيل الأخطاء

والطريقة التي تم تصميمه (من فضلك لا تسأل لماذا) هو فتح streamwriter جديدة في كل مرة كان التطبيق لتسجيل رسالة. هذا إخراج كل ما ل./Logs/[current-date].txt الذي يحل عادة إلى "C: \ myappfolder \ السجلات [للتيار التاريخ]. TXT"

وكل شيء يعمل بشكل صحيح، ولكن بعد أن تستخدم ملف الحوار مفتوح ليقول: "C: \ الرئيسية \ مجلدي \ MYFILE" في streamwriter يحاول الكتابة إلى "ج: \ الرئيسية \ مجلدي \ السجلات [للتيار التاريخ]. TXT "

وأنا أعلم حلول لهذه المشكلة ولكن أنا فقط لا أفهم ما يحدث

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

المحلول

والدليل الحالي هو قيمة واسعة العملية.

ووOpenFileDialog هو تغيير الدليل الحالي.

إذا كنت تستخدم الطبقة OpenFileDialog .NET، يمكنك تعيين الخاصية RestoreDirectory إلى true لقول الحوار لترك الدليل الحالي وحده (على الرغم من أن طريقة مستندات لRestoreDirectory هو مكتوب قد يكون هناك بعض القضايا خيوط، التي أتصور قد يجعل هذا لا يزال غير مناسب لوسيلة لتسجيل).

نصائح أخرى

وكما قال مايك B، OpenFileDialog قد تتغير الدليل الحالي. منذ ./ نسبة إلى التيار، الذي يتغير أيضا.

والخاصية RestoreDirectory بتعديل هذا السلوك.

وتفعل شيئا مثل هذا إلى حد ما:

OpenFileDialog openFileDialog1 = new OpenFileDialog();

OpenFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;

MSDN .

مايك B هو الصحيح تماما.

إذا كنت تستخدم API الأصلي بدلا من .NET، تحتاج إلى تعيين الخيار OFN_NOCHANGEDIR في بنية OPENFILENAME. وتنص الوثائق أنه لا يعمل ويندوز XP على الرغم من، ولست متأكدا إذا كان هذا ينطبق على نسخة .NET أو لا.

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

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