PDA

نسخه کامل مشاهده نسخه کامل : [B]جلوگیری از edit فایل word[/B]



fatima81
25-10-2006, 06:52
با سلام
من يك فايل word دارم
که بعضی از کاربران نباید به اون در حالت EDIT دسترسی داشته باشند.
من چطوری می تونم اونو بصورت read only باز کنم
یه کد زیر را که استفاده می کنم اصلا اجرا نمیشه


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
لطفا اگه کسی میدونه مشکل این کد چیه منو راهنمایی کنه

soheil1366
26-10-2006, 00:07
سلام
شما يك نكته رو توجه نكردين و اون اينه كه اگر ميخواين آدرس يك فايلي رو كه در دايركتوري برنامه وجود نداره به برنامه بدين بايد به جاي / از // استفاده كنين يعني به عنوان مثال
d://newfolder//text.txt
چون / در رشته ها معنی خاصی داره
در ضمن برای قسمت دوم تابع ()open از ios::in استفاده کنین
ببخشید من توجه نکرده بودم که گفتید در سی شارپ ولی در سی ++ که اینطوریه و من در سی شارپ سر رشته ندارم

someone
26-10-2006, 04:05
سلام.
با كدي كه شما داريد يك فايل رو در حالت ReadOnly باز ميكنيد.كه البته چند تا مورد داره.
كه بايد به اين شكل اجرا بشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

الان محتويات line همون محتويات فايل word تون هست.

fatima81
26-10-2006, 07:33
باسلام
جنابSomeOne ممنون از توضيحاتت
ميشه بگيد كنترل MessageBox چیه؟ باتشکر

someone
26-10-2006, 13:39
دوباره سلام
MessageBox در #C يك كلاس هست كه براي نشون دادن Message ها به كار ره.
كه يك متود به نام Show داره كه كافي type مورد نظر رو در اون قرار بديد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حتما پنجره هايي رو ديديد كه به كاربر پيغامي رو از طرف برنامه نشون ميدن.
مثل پرسيدن save كردن و يا بستن برنامه ,....اين پيغام ها توسط MessageBox ايجاد ميشه.

someone
26-10-2006, 17:21
راستي يادم رفت. براي تغيير Attribute يك فايل ميتونيد از متود SetAttributes استفاده كنيد:
كه به شكل زير استفاده ميشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

fatima81
27-10-2006, 08:35
سلام
باتشكر
اين كلاس Message رو خودمون باید بنویسیم؟
من یک کلاسشو پیدا کردم ولی باز این کد اجرا نشد
ببخشيد من اينقدر سئوال مي پرسم

someone
28-10-2006, 00:07
براي اينكه از MessageBox.Show استفاده كنيد كافي اين namespace رو به برنامه اضافه كنيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

fatima81
28-10-2006, 07:49
اين كد براي Web Application هست وهمچین namespace ای توی web پیدا نکردم
درضمن Message Box برای نشون دادن پیغام های دیگه درست اجرا میشه

someone
28-10-2006, 17:38
دوباره سلام.
بیشتر توضیح میدید می خواید دقیقا چی کار کنید؟
برنامتون webApp هست؟

fatima81
29-10-2006, 01:22
مي خوام يك فايل word را باز كنم
براي بعضي كاربران براي خووندن (read) يعني هيچ تغييري در محتويات فايل ايجاد نشه
براي عده اي ديگه براي نوشتن (write) به صورتي كه بتوونند در فايل تغيير ايجاد كنند
برنامه با webapp
با تشكر

someone
29-10-2006, 03:24
دوباره سلام.
چون از webApp استفاده ميكنيد متودي به نام MessageBox نداريد.
ولي ميتونيد اون رو شبيه سازي كنيد.دليلش هم Server Side بودن Asp.Net هست.
در ضمن نيازي به استفاده ازش نداريد ميتونيد اطلاعات خونده شده رو در يك TextBox
نشون بديد و يا روش هاي ديگه.
مثلا:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توجه كنيد كه از كد هاي قبلي هم ميتونيد استفاده كنيد.فرقي نميكنه.
براي شبيه سازي يك MessageBox ساده ميتونيد از كد زير استفاده كنيد


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

fatima81
30-10-2006, 01:26
سلام
ممنون از توجهتون
بازم مشكل من حل نشد . با كد بالا , وقتي از text box استفاده میکنم محتویات اونو به صورت زیر نمایش میده


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از script كه استفاده مي كنم اجرا میشه ولی هیچی نمایش نمیده
در ضمن من نمی خوام محتویات فایل رو توی text box نشان بده , بلکه می خوام با برنامه word اونو نمایش بده
آیا برای اجرای این کد نیاز به نرم افزار خاصی نیست ؟

Mitibob
30-10-2006, 02:35
اصولا برای باز کردن اسناد office نمی توان از IOStream استفاده کرد. چون این اسناد قالب خاصی دارند. استفاده مستقیم از نرم افزار Office (در مثال شماWord ) هم درست نیست چون تمام اختیارات ویرایشی را به کاربر خواهد داد.

فکر می کنم 2 راه مناسب زیر وجود دارد:
1. از OLE استفاده کنید. در این تکنولوژی قدیمی شما می توانید همه اسنادی که در نرم افزار های سازگار با OLE مانند Office ایجاد شده اند را به شرط اینکه خود نرم افزار روی سیستم نصب شده باشد در یک کنترل OLE باز کنید که برای اختیاراتی مانند ویرایش یا حذف قابل تنظیم هستند.

از آنجا که این کنترل ها (OLE Controls) ضمیمه ی Visual studio .net نشده اند می توانید از کنترل WebBrowser استفاده کنید که کار شما را در Webforms راحت می کند. این سندMSDN راهنمای مفصلی است:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

2. راه دیگر استفاده از کنترل های Parser برای اسناد Word است که البته معمولان برای Webfroms منتشر نمی شوند. این سایت کنترا های Shareware مناسبی دارد:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


در آخر تاکید کنم که بهتر است قبل از تصمیم به استفاده از هر کدام از این راهها منظورتان را واضح بنویسید که فایل word در کجا قرار دارد طرف server یا Client؟ همچنین این سند قرار است کجا نمایش داده شود؟ در صفحه ی مرورگر یا در نسخه ی باز شده ای از نرم افزار Word؟

Mitibob
30-10-2006, 03:15
تین لینک جواب کاملی رو که می خوای داره:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


راستی این یه کلاسه جدیده که من ندیده بودم تا حالا wordClassDocument فکر کنم من که چکش می کردم امکانات زیادی داشت اما صراحتا به Read و Write اشاره نکرده بود که پیش نهاد می کنم موقع رد کردن فایل اون رو LOCK کنی.

fatima81
30-10-2006, 03:34
باتشکر
ببينيد فايل word درطرف server قرار دارد وفایل قرار است در نسخه ی باز شده ای از نر م افزار word نمایش داده شود

در ضمن من از کدی مشابه لینک زیر استفاده میکنم

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ولی ین error رو میده
Access is denied
تنظیمات مربوط به peroperties/security رو هم انجام دادم

someone
31-10-2006, 12:37
دوباره سلام.
اول يه تشكر كنم به خاطر اطلاعات كاملي كه دوست بسيار عزيزم"Mitibob " دادن.
يه توضيح هم بدم براي مشكل پيش اومد براي شما.
اينكه براي خوندن فايل word نميشه از stream ها استفاده كرد زياد موافق نيستم.
چون كاملا بستگي به فايل word مورد نظر داره. در ضمن مشكلي كه براي ديدن محتويات اين فايل داريد
به دليل اينه كه تمام اين محتويات در يك خط از Textbox شما قرار گرفتن.و وقتي از stream داريد استفاده
ميكنيد بايد اصلاحاتي رو انجام بديد.كدي هايي كه گذاشتم فقط براي نمونه هستند ونياز به تكميل شدن دارن.
نكته بعدي در مورد wordClassDocument كه دوستم گفتن هست . اين كلاس همراه با يه COM منتشر شده
به نام microsoft word object كه ميتونيد ازش استفاده كنيد.براي توضيحات بيشتر ميتونيد به اين link مراجعه كنيد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ميتونيد ازش در interface ي كه طراحي ميكنيد , استفاده كنيد. حتما بهش نگاه كنيد.
چون فوق العاده كامل هست.

در ضمن از كدي شبيه اين هم ميتونيد استفاده كنيد كه نياز به توضيح نداره.(APS.Net)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Mitibob
01-11-2006, 02:02
someone عزیز نمی دونم چه اصراری بر باز کردن اسناد Word با Stream دارید. اگر توی اسناد Word عکس یا نمودار یا همچین چیزهایی باشه کد شما به چه دردی می خوره؟ به هر حال.

fatima من در کد هایی که شما قرار دادید مثالی مانند اون link که در کد از شی Word (با تشکر از Someone مه ریشه ی اون Component رو پیدا کرد) ندیدم. کد جدیدتون که از سی Word استفاده می کنه بذارید تا ببینم چه خبره.

در ضمن فراخانی های Absolute مثل:
D:\Inetpub\[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
رو به صورت زیر انجام بدین تا اون تنظیمات نوشتن/خوندن اعمل بشن:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یا:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

someone
01-11-2006, 03:31
"Mitibob" جان سلام.
متوجه منظورتون شدم. بله منم حرفتون رو قبول دارم.
ولي زياد موافق استفاده از word به صورت مستقيم براي ذخيره سازي و همين طور براي استفاده در webApp
(حتي Com ها و OLE هايي كه براي اين كار هستند)
نيستم. قالب زياد مناسبي نيست. اگه يه فايل word تنها شامل text باشه ترجيح ميدم خوندنش توسط
stream ها انجام بشه. البته نظر شخصي من هست و نظر شما مسلما ارجعيت داره.
ممنون كه در اين بحث شركت كرديد.

fatima81
01-11-2006, 07:37
سلام
با تشکر از توضیحات دوستان

درمورد کدی که someone گذاشته بودند
من ازاین کد برای باز کردن فایل استفاده می کنم وهیج مشکلی نداره
مشکل من همانطور که قبلا هم گفتم تعیین سطح دسترسی برای read و write می باشد وتوی این دو روش(sream)
و com این امکان وجود داره

و Mitibob

کد جدیدتون که از سی Word استفاده می کنه بذارید تا ببینم چه خبره.

این هم کد

object fileName = strfilpath;
object readOnly = false;
object isVisible = true;
object missing = System.Reflection.Missing.Value;
Word.ApplicationClass oWordApp = new Word.ApplicationClass();
Word.Document oWordDoc = oWordApp.Documents.Open(ref fileName,
ref missing,ref readOnly,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref isVisible,
ref missing,ref missing,ref missing);
oWordDoc.Activate();
oWordApp.Selection.TypeText("This is the text");
oWordApp.Selection.TypeParagraph();
oWordDoc.Save();
oWordApp.Application.Quit(ref missing, ref missing, ref missing);
اوون error برطرف شد و یه error دیگه میده
Could not open macro storage

باتشكر

someone
02-11-2006, 14:00
دوباره سلام.
نگاهی به link زیر بکنید.مشکلتون حل میشه.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگه حل نشد اطلاع بدید.
ممنون.

fatima81
09-11-2006, 00:21
سلام
با تشكر از همه دوستان
بالاخره مشكل من حل شد .
ممنون .

Edris.IT
27-11-2006, 11:42
سلام
با تشكر از همه دوستان
بالاخره مشكل من حل شد .
ممنون .


سلام ميتونم بدونم مشكلتون چطور حل شد؟