PDA

View Full Version : پاک کردن فایل مخفی



xrezax
دوشنبه 15 اسفند 1390, 21:24 عصر
دوستان یک فایل hiden دارم به نام reza.txt چطور با دستور kill پاکش کنم ؟؟؟؟؟؟ :متفکر:

SlowCode
دوشنبه 15 اسفند 1390, 21:31 عصر
Kill "C:\reza.txt"

xrezax
دوشنبه 15 اسفند 1390, 22:13 عصر
کار نکرد!!!!!!!!
اررور می زنه

SlowCode
دوشنبه 15 اسفند 1390, 22:27 عصر
خوب چه ارروی میده؟ متنش رو بنویسین.

xrezax
دوشنبه 15 اسفند 1390, 22:34 عصر
می گه دستور اشتباهه. بعد کلمه Kill انتخاب میشه

SlowCode
دوشنبه 15 اسفند 1390, 22:39 عصر
اوه ببخشید اشتباه شد، پست اصلاح شد.

xrezax
سه شنبه 16 اسفند 1390, 23:39 عصر
کار نمیکنه. من همه این روش هارو تست کردم. نشد که نشد!!!!!

AbbasVB
چهارشنبه 17 اسفند 1390, 09:17 صبح
دوست عزیز اول از این دستور استفاده کن
SetAttr "C:\reza.txt", vbNormal

بعد از دستور kill استفاده کن

Mr'Jamshidy
چهارشنبه 17 اسفند 1390, 11:13 صبح
هیچ ربطی نداره دستور Kill به Attribute فایل نگاه نمیکنه که

شما تو نوشتن دستور یک مشکلی داری

حالا چی نمیدونم

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

xrezax
جمعه 19 اسفند 1390, 17:22 عصر
دوستان راهی ندارید بشه فایل مخفی پاک کرد؟؟؟؟؟؟

SlowCode
جمعه 19 اسفند 1390, 17:38 عصر
دوست عزیز همون طور که آقای جمشیدی گفتن برای پاک کردن فایل نیازی به تعیین Attribute اون نیست.

xrezax
جمعه 19 اسفند 1390, 17:48 عصر
عجب آآآآآآآ

دوستان چرا امتحان نمی کنید خودتون. با این دستور بسازین بعد پاک کنین. می فهمین حق بامنه


Open App.Path & "\" & "2.txt" For Append As #1
Print #1,
Close #1
SetAttr App.Path & "\" & "2.txt", vbHidden + vbSystem + vbReadOnly

SlowCode
جمعه 19 اسفند 1390, 17:55 عصر
آره انگار راست میگه، الان امتحان کردم پیغام میده: File not found :متعجب:

xrezax
جمعه 19 اسفند 1390, 18:06 عصر
من اینجوری پاکش کردم


SetAttr App.Path & "\" & "2.txt", vbNormal
Kill App.Path & "\" & "2.txt"

اما دستور بهتری نیست؟؟؟

Veteran
جمعه 19 اسفند 1390, 18:25 عصر
مشکلی نداره که راحت پاک میشه
Kill "C:\111.txt"

SlowCode
جمعه 19 اسفند 1390, 18:46 عصر
من اینجوری پاکش کردم

1
2
SetAttr App.Path & "\" & "2.txt", vbNormal
Kill App.Path & "\" & "2.txt"


اما دستور بهتری نیست؟؟؟
فکر کنم ساده ترین حالت همینه.



مشکلی نداره که راحت پاک میشه
Kill "C:\111.txt"

شما Attr فایل رو روی hidden تنظیم کردید؟

ASedJavad
جمعه 19 اسفند 1390, 19:01 عصر
این مشکل به خاطر مخفی بودن فایل نیست بلکه ظاهرا بخاطر سیستمی بودن فایله!

SlowCode
جمعه 19 اسفند 1390, 19:06 عصر
وقتی که روی hidden هم تنظیم می کنم جواب نمیده.

Veteran
جمعه 19 اسفند 1390, 20:02 عصر
من تونستم ی کاری بکنم

Private Sub Command1_Click()
Call killer("C:\3333.txt")
End Sub
Public Sub killer(Path As String)
Shell "attrib" & " " & Path & " " & "-h" & " " & "-s"
Kill Path
End Sub
میاد فایل رو از مخفی بودن در میاره بعد حذف میکنه
اما فایل رو از مخفی در اوردن یکم زمان میبره به خط kill که میرسه نکه واسه از مخفی دراودرن زمان یکم میبره برای بار اول خطا میده
یعنی فایل ما مخفی هست ادرس رو میدیم بعد به خط shell که میرسه میخواد فایل رو از مخفی بودن در بیاره اون خط اجرا میشه
بعد میره خط بعدی kill چون هنوز فایل از مخفی بودن در نیومده ارور میده اما اگه دوباره اجرا کنیم فایل پاک میشه
البته راهای دیگه ای هم باید باشه مثلا با api
اما اگر بخوایم با این کد من حذف کنیم باید یک تایمر بزاریم قبل خط kill زمان مثلا 2 ثانیه
تایمر فعال بشه بعد عر موقعه تایمر 2 ثانیه ازش رفت غیر فعال بشه بعد خط kill اجرا بشه

SlowCode
جمعه 19 اسفند 1390, 20:10 عصر
من تونستم ی کاری بکنم

Private Sub Command1_Click()
Call killer("C:\3333.txt")
End Sub
Public Sub killer(Path As String)
Shell "attrib" & " " & Path & " " & "-h" & " " & "-s"
Kill Path
End Sub
میاد فایل رو از مخفی بودن در میاره بعد حذف میکنه
اما فایل رو از مخفی در اوردن یکم زمان میبره به خط kill که میرسه نکه واسه از مخفی دراودرن زمان یکم میبره برای بار اول خطا میده
یعنی فایل ما مخفی هست ادرس رو میدیم بعد به خط shell که میرسه میخواد فایل رو از مخفی بودن در بیاره اون خط اجرا میشه
بعد میره خط بعدی kill چون هنوز فایل از مخفی بودن در نیومده ارور میده اما اگه دوباره اجرا کنیم فایل پاک میشه
البته راهای دیگه ای هم باید باشه مثلا با api
اما اگر بخوایم با این کد من حذف کنیم باید یک تایمر بزاریم قبل خط kill زمان مثلا 2 ثانیه
تایمر فعال بشه بعد عر موقعه تایمر 2 ثانیه ازش رفت غیر فعال بشه بعد خط kill اجرا بشه

من که نفهمیدم شما چی میگید! ببینید ساده ترین راه همینه، نیازی به تایمر و غیره نیست.
SetAttr App.Path & "\" & "2.txt", vbNormal
Kill App.Path & "\" & "2.txt"

setroyd
شنبه 20 اسفند 1390, 00:45 صبح
من تونستم ی کاری بکنم

Private Sub Command1_Click()
Call killer("C:\3333.txt")
End Sub
Public Sub killer(Path As String)
Shell "attrib" & " " & Path & " " & "-h" & " " & "-s"
Kill Path
End Sub
میاد فایل رو از مخفی بودن در میاره بعد حذف میکنه
اما فایل رو از مخفی در اوردن یکم زمان میبره به خط kill که میرسه نکه واسه از مخفی دراودرن زمان یکم میبره برای بار اول خطا میده
یعنی فایل ما مخفی هست ادرس رو میدیم بعد به خط shell که میرسه میخواد فایل رو از مخفی بودن در بیاره اون خط اجرا میشه
بعد میره خط بعدی kill چون هنوز فایل از مخفی بودن در نیومده ارور میده اما اگه دوباره اجرا کنیم فایل پاک میشه
البته راهای دیگه ای هم باید باشه مثلا با api
اما اگر بخوایم با این کد من حذف کنیم باید یک تایمر بزاریم قبل خط kill زمان مثلا 2 ثانیه
تایمر فعال بشه بعد عر موقعه تایمر 2 ثانیه ازش رفت غیر فعال بشه بعد خط kill اجرا بشه

دوست من vb به صورت خط به خط کد رو میخونه شک دارم تا یه دستور اجرا نشده دستور بعدی اجرا بشه شاید مشکل از کد نویسیه ؟؟

و 2 سانیه هم نمیشه چون اگه حرف شما درست باشه بستگی به حجم فایل داره سرعت normal کردن فایل پس این راه هم درست نیست .

شما باید چک کنید اگر normal بود اون موقع پاک شود با دستور getattr این بهترین راهه فکر کنم !!!! ولی باز من میگم مشکل از کامل ننوشتن کد هست .

just4froum
شنبه 20 اسفند 1390, 14:09 عصر
شما می توانید به جای تایمر از دستور DoEvents استفاده کنید ( معمولا جواب میده ).

meys34
شنبه 20 اسفند 1390, 16:09 عصر
من اینجوری پاکش کردم


SetAttr App.Path & "\" & "2.txt", vbNormal
Kill App.Path & "\" & "2.txt"

اما دستور بهتری نیست؟؟؟

نه متاسفانه حتی خود msdn هم راهی بجز تغییر attribute پیشنهاد نکرده




To delete a read-only file, first you must remove the read-only attribute
To delete or rename a file, you must have either delete permission on the file, or delete child permission in the parent directory
To recursively delete the files in a directory, use the SHFileOperation function
To remove an empty directory, use the RemoveDirectory function
To close an open file, use the CloseHandle function

منبع:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915(v=vs.85).aspx


دوست من vb به صورت خط به خط کد رو میخونه شک دارم تا یه دستور اجرا نشده دستور بعدی اجرا بشه شاید مشکل از کد نویسیه ؟؟

و 2 سانیه هم نمیشه چون اگه حرف شما درست باشه بستگی به حجم فایل داره سرعت normal کردن فایل پس این راه هم درست نیست .

شما باید چک کنید اگر normal بود اون موقع پاک شود با دستور getattr این بهترین راهه فکر کنم !!!! ولی باز من میگم مشکل از کامل ننوشتن کد هست .

شکی نیست که خط به خط اجرا میشن ولی

به دلیل استفاده از دستور Shell attrib
ابتدا باید برنامه C:\Windows\System32\attrib.exe اجرا بشه و attribute فایل رو تغییر بده که این ممکنه چند صدم ثانیه طول بکشه

ولی vb چون خطوط دستورات رو، متوالی اجرا میکنه منتظر اجرا و اتمام کار attrib.exe نمیشه و میره سراغ دستور بعدی و مشکل همینجا ظاهر میشه


خوب چه کاریه .... اگر محدودیت محدودیت محدودیت محدودیت محدودیت محدودیت ... نداشته باشیم عقل که داریم... از دستورات داخلی vb برای این منظور استفاده میکنیم ( که همانا منظور ما و دوستان SetAttr می باشد)

SetAttr App.Path & "\" & "2.txt", vbNormal
Kill App.Path & "\" & "2.txt


کلا تغییر attrib ربطی به حجم فایل نداره و در فایل تغییری ایجاد نمیشه که بخواهد خیلی طول بکشه مثل وقتی که اسم فایل رو عوض میکنید


اگر هم اصرار به استفاده از Shell داریم راه های فراوانی ممکنه داشته باشه مثلا: باید منتظر اتمام کار attrib.exe بشویم
یعنی SHELL AND WAIT
http://www.vb-helper.com/howto_shell_wait.html


شما می توانید به جای تایمر از دستور DoEvents استفاده کنید ( معمولا جواب میده ).
دستور DoEvents که دوستمون گفتن مربوط به event های داخلی برنامه است نه اجرای پروسس های خارج از برنامه (که همانا منظور attrib.exe میباشد)