سؤال

وأنا أحاول أن استخدام StreamReader لقراءة ملف، ولكن هو دائما قيد الاستخدام من قبل عملية أخرى حتى أحصل على هذا الخطأ:

<اقتباس فقرة>   

والعملية لا يمكن الوصول إلى الملف   '\ arfjwknasgmed17 \ C $ \ FLAG   CONDITION \ CP-ARFJN-FLAG.XLS 'ل   يتم استخدامه من قبل عملية أخرى.

هل هناك طريقة أستطيع أن أقرأ هذا دون نسخها؟ أم أن ذلك الخيار الوحيد لي؟

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

المحلول

ويمكنك قراءة الملف فقط إذا كان البرنامج الذي فتح الملف المحدد أولا حقوق المشاركة على قراءة هذا الملف.

إذا لا يكون الملف في الواقع أي حقوق تقاسم القراءة على الرغم من أنك لن تكون قادرا على نسخ ذلك في المقام الأول.

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

إذا كان البرنامج الذي فتح الملف في المقام الأول يدعم حجم نسخة الظل (VSS)، يمكنك أيضا استخدام VSS للوصول إلى الملف.

وهناك برامج التشغيل التجارية التي تسمح لك بالوصول إلى هذه الملفات، حتى عندما تكون قيد الاستعمال. استخدمته لتكون قادرة على الحصول على إدارة الملفات المفتوحة من قبل سانت برنارد، ويمكنك أيضا استخدام وصول مدير الملفات (FAM) التي كتبها VisionWorks شركة الحلول عادة OEM'ed برامج التشغيل هذه لشركات برنامج النسخ الاحتياطي لإدراجها في منتجاتها.

وVSS يعمل عن طريق إخبار البرنامج الذي يحتوي على ملف فتح بالفعل أن برنامج آخر ترغب في القراءة من الملف. ثم يفعل VSS نسخة من الملف ويتيح لك قراءة من هذه النسخة. VSS لا يعمل من أجل التطبيقات القديمة.

وFAM يعمل بشفافية لبرامج قديمة وغير تركة على حد سواء عن طريق تحديد "قائمة السماح" من التطبيقات التي يمكن الوصول إلى فتح حصرا والملفات مؤمن. ويسمح للبرامج الوحيدة في هذه القائمة الوصول إلى هذه الملفات. عندما يتم فتح ملف، فإنه يذهب إلى وضع التخزين المؤقت حتى يتسنى لك الحصول على نسخة من الملف كما كان عندما بدأ "النسخ الاحتياطي / فتح 'من الملف. عند هذه النقطة البرنامج الذي افتتح في الأصل ملف ترى الملف كما هو في الواقع، والبرنامج الثاني في القائمة المسموح بها، يرى الملف كما كان عندما وقع "فتح / احتياطية" من الملف. وهذا ما يضمن اتساق الملف.

نصائح أخرى

ومحاولة رمز أدناه.

FileStream fileStr = File.Open(<full file name>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
fileStream = new StreamReader(fileStr);

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

تنويه: كان يعمل، ولكن بعد ذلك، ولست متأكدا ما إذا كان يجب استخدامه في رمز الإنتاج. أنا لم أتمكن من العثور على أي وثائق رسمية تقول انها يجب أن تعمل.

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