PDA

View Full Version : مشکل با SetAttr



Arashdn
سه شنبه 05 دی 1391, 20:08 عصر
سلام دوستان
من به تازگی دارم با وی بی 6 برنامه می نویسم
یه سوال دارم
چطور میتونیم تابع SetAttr بره تمام فایل ها و sub folder های یه فولدر استفاده کنیم؟
ممنون

vbhamed
چهارشنبه 06 دی 1391, 09:13 صبح
سلام

شما اول بايد پوشه ها و فايلهاي درونش رو پيمايش كنيد و بعد دونه دونه اونها رو تنظيم كنيد
براي پيمايش پوشه داخل همين سايت يا گوگل جستجو كنيد نمونه زياده

Arashdn
چهارشنبه 06 دی 1391, 13:48 عصر
سلام
متاسفانه هر چی گشتم چیزی پیدا نکردم
ممکنه یه لینک از مطالب مربوط بدید؟

m2011kh
چهارشنبه 06 دی 1391, 14:13 عصر
سلام دوست من اگه بخوایم فقط از ابزار خود ویبی استفاده کنیم با استفاده از یه DirListBox و یه DriveListBox و چند حلقه تو در تو لیست تمام دایرکتوریای یک درایو رو بدست بیارید.
ببخشید که فرصت نکردم بیشتر راهنماییتون کنم ولی فک کنم همین راهنمایی ها کافی بود تا برید دنبال جواب سوالتون و پیداش کنین.
MMD

SlowCode
چهارشنبه 06 دی 1391, 17:13 عصر
سلام این کد واسه پیدا کردن تمام پوشه هاست:
Dim CDirs As New Collection
With Dir1
List1.Clear
CDirs.Add .List(.ListIndex)
Do
.Path = CDirs(1)
If .ListCount > 0 Then
For i = .ListIndex + 1 To .ListCount - 1
CDirs.Add .List(i)
List1.AddItem .List(i), 0
DoEvents
Next
End If
CDirs.Remove 1
Loop Until CDirs.Count = 0
End With

کافیه یه DirListBox و یه لیست باکس بزاری روی فرم.
واسه پیدا کردن فایلها هم سورس زیاد هست ولی اگه نتونستی پیدا کنی بگو تا بزارم.

Arashdn
پنج شنبه 07 دی 1391, 10:37 صبح
فک کنم باید یه کم بیشتر vb یاد بگیرم
چون نصف این کد ها رو نفهمیدم ....

میشه یه جوری ساده تر نوشت و از
collection استفاده نکرد
و فقط واسه هر فولدر یا فایلی که پیدا کرد یه setattr بزنیم؟

m2011kh
پنج شنبه 07 دی 1391, 13:10 عصر
دوست من با اون کدی که آقا محسن گذاشتن یه لیست از ولدر ها میگیره.
با این کد برای همه اونها کد Setattr رو اجرا میکنیم:
For i = 0 to list1.listcount -1
setattr list1.list(i) ,vbnormal
next i
فقط به جای VBnormal میتونید از موردای دیگه استفاده کنید.
MMD

vbhamed
پنج شنبه 07 دی 1391, 13:13 عصر
سلام

نه نميشه، SetAttr فقط يك فايل به عنوان پارامتر مي‌گيره

SlowCode
پنج شنبه 07 دی 1391, 14:43 عصر
سلام

نه نميشه، SetAttr فقط يك فايل به عنوان پارامتر مي‌گيره

سلام
منظورتون اینه که روی پوشه تاثیری نداره؟!
فکر کنم منظورتون یه چیز دیگه بود، چون روی فولدر هم عمل میکنه.


For i = 0 to list1.listcount -1
setattr list1.list(i) ,vbnormal
next i
البته نیازی نیست که دوباره توی یه حلقه دیگه این کار رو انجام داد. میتونیم به محض پیدا کردن پوشه مخفیش کنیم.
Dim CDirs As New Collection
With Dir1
List1.Clear
CDirs.Add .List(.ListIndex)
Do
.Path = CDirs(1)
If .ListCount > 0 Then
For i = .ListIndex + 1 To .ListCount - 1
CDirs.Add .List(i)
SetAttr .List(i), vbHidden
DoEvents
Next
End If
CDirs.Remove 1
Loop Until CDirs.Count = 0
End With

vbhamed
پنج شنبه 07 دی 1391, 16:38 عصر
سلام

محسن 15 عزيز
اين پست من جواب پست قبلي Arashdn بود ولي مثل اينكه شما در فاصله تايپ من پست دادين !

Arashdn
پنج شنبه 07 دی 1391, 20:05 عصر
خب
برنامه رو واسه فولدر های خیلی مبتدی و بصورت زیر نوشتم
For i = 0 To Dir1.ListCount - 1
Print Dir1.List(i)
Next i
حالا لیست فایل های هر فولدر رو چطور بگیریم؟؟؟؟

SlowCode
پنج شنبه 07 دی 1391, 20:24 عصر
مثلا واسه این پوشه:
f=dir("C:\new folder")
while f<> ""
Print f
f=dir()
wend

Arashdn
پنج شنبه 07 دی 1391, 21:46 عصر
مثلا واسه این پوشه:
f=dir("C:\new folder")
while f<> ""
Print f
f=dir()
wend

متاسفانه این روش فایل های هیدن رو نشون نمیده
راه دیگه ای برای گرفتن لیست نیست؟

راستی این wend یعنی چی؟ و چرا تو خط چهارم f=dir() رو آوردیم؟

شرمنده که مبتدی هستیم و سوالامون ناجوره ...

SlowCode
پنج شنبه 07 دی 1391, 21:56 عصر
بله همینطوره اگه بخوای فقط فایلهای مخفی رو نشون بده باید خط اول رو اینطوری بنویسی:
f=dir("C:\new folder",vbhidden)

راه دیگه ای برای گرفتن لیست نیست؟
این سورس رو ببینید.
http://uplod.ir/t6x6loybgn4i/Find.zip.htm

راستی این wend یعنی چی؟
وقتی حلقه while رو استفاده میکنیم باید با wend ببندیمش، در واقع محدودش رو مشخص میکنیم.

و چرا تو خط چهارم f=dir() رو آوردیم؟واسه بدست آوردن نم فایل بعدی.

شرمنده که مبتدی هستیم و سوالامون ناجوره ...خواهش میکنم، همه اولش اینجورن.

Arashdn
پنج شنبه 07 دی 1391, 22:08 عصر
بله همینطوره اگه بخوای فقط فایلهای مخفی رو نشون بده باید خط اول رو اینطوری بنویسی:
من میخوای همه فایلها رو نشون بده ، مخفی ، سیستمی ، معمولی و هر چی که هست ...
این روش شما برام قابل فهمه ف اون سورس کده واسه ما مبتدی ها فک کنم زوده ....


وقتی حلقه while رو استفاده میکنیم باید با wend ببندیمش، در واقع محدودش رو مشخص میکنیم.
فرقش با دستور Loop چیه؟

SlowCode
پنج شنبه 07 دی 1391, 22:49 عصر
واسه ما هم زوده! :لبخند:من خودم نمیتونم اینو بنویسم قرار هم نیست آدم همه چی رو خودش بنویسه. فقط یکم باهاش ور برو و طرز کارش رو یاد بگیر. همین.

فرقش با دستور Loop چیه؟
حالا یکم از بحث خارج شدیم مدیرا میان گیر میدن!
loop دستور نیست، منظورت حلقه do هست.
این حلقه از while کاملتر هست.
مثلا این همون کار بالایی رو میکنه:
f=dir("C:\new folder")
do while f<> ""
Print f
f=dir()
loop
الان اگه شرطمون(f<>"") غلط باشه حلقه اصلا اجرا نمیشه، ولی اگه به صورت زیر بنویسیم حداقل یه بار اجرا میشه:
f=dir("C:\new folder")
do while f<> ""
Print f
f=dir()
loop while f <> ""

لطفا این مباحث رو تو گوگل جستجو کن و یا یه pdf آموزشی پیدا کن چون اینجا نمیشه همه چی رو توضیح داد.

Mohammad.sweets
جمعه 08 دی 1391, 19:41 عصر
دوست عزیز برای سادگی کار ، شما میتونید یه فایل BAT توسط وی بی تولید کنید که اون فایل همه ی فایل هارو به حالت های دلخواه شما در بیاره.....

مثلا دستور زیر...

Open App.Path & "\NHS.bat" For Output As #1
Print #1, "@echo off" & vbCrLf & "cls" & vbCrLf & "f:" & vbCrLf & "cd M4" & vbCrLf & "ATTRIB -H -S"
Close #1
Shell "Explorer " & App.Path & "\NHS.bat", vbHide

این یه فایل bat ایجاد میکنه و بعد اجراش میکنه .... بقیه ی کارارو اون انجام میده....
وارد درایو f میشه بعد به پوشه ی m4 میره و تمام فایلاشو از حالت مخفی در میاره..