ايران ويج

نسخه‌ی کامل: حذف فایل با یک پسوند خاص
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
من میخوام یک فایل رو با یک پسوند خاص رو تو کل سیستم ( کل درایوها ) سرچ کنم و بعد تمام چیزهایی رو که پیدا کرده رو پاک کنم .
خوب دوست عزیز ببینم چه نوع فایلی را میخواهی حذف کنی اگه سیستمی باشه که عمرا بشه یا مگه دوستان که حرفه ای هستند


منظورم اینه که اگر لازم ویندوز باشن یا حیاطی باشن نمیشه
2- اگه مال ویروس باشن هم نمیشه چون ویروس در حال اجرا است و نمیزاره که حذف بشن
3- اگه مخفی هم باشن یکم مشکله یا باید برنامه را یکم پیشرفته باشه که فایل های مخفی را هم بتونه حذف کنه
At
با کمی تغيير از مثالی که ضمينه کردم ميتونيد استفاده کنيد
با بچ فایل از همه ساده تره :)
del *.xyz /s
دوستان عزیز من خودم یه سورس برای سرچ دارم ولی نیدونم چطوری فایل هایی رو که پیدا میکنه پاکشون کنم ( منظورم اینه که از تو کامپیوترپاک کنم ) سورس رو ضمینه میکنم

مرسی
سلام.
شما با API های FindFirstFile و FindNextFile میتونی کل فایل و فولدرهای داخل یه آدرس رو به دست بیاری.
بهتره یه تابع بنویسی که ازت آدرس بگیره و فایل و فولدرهای داخلش رو برگردونه.
بعد یه تابع ریکرسیو (بازگشتی) بنویس که با دریافت یه آدرس کل فایل و فولدرهای زیر شاخش رو به کمک تابع اول برای وجود اون پسوند بررسی کنه.
بعد دونه دونه اسامی درایو هارو به تابع ریکرسیو میدی و به این صورت کل هارد بررسی میشه.

این روش و الگوریتم کار. سورس رو هم که دوستان گذاشتن.
دوست عزیز من منظورتونو متوجه نمیشم آخه تازه کارم اگه میشه سورس بالا رو برای ادیت کنید که با برسی سورس بیشتر متوجه بشم

(۱۹-مهر-۱۳۹۰, ۰۱:۱۷:۵۰)aliooali نوشته است: [ -> ]دوست عزیز من منظورتونو متوجه نمیشم آخه تازه کارم اگه میشه سورس بالا رو برای ادیت کنید که با برسی سورس بیشتر متوجه بشم

سلام.

کد:
Option Explicit

'Find Drives & Get Type Of Drives
Private Declare Function GetLogicalDriveStringsA Lib "kernel32" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveTypeA Lib "kernel32" (ByVal nDrive As String) As Long
'Find Drives & Get Type Of Drives

'Files And Folders
Private Declare Function FindFirstFileA Lib "kernel32" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFileA Lib "kernel32" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Type FILETIME
  dwLowDateTime As Long
  dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
  dwFileAttributes As Long
  ftCreationTime As FILETIME
  ftLastAccessTime As FILETIME
  ftLastWriteTime As FILETIME
  nFileSizeHigh As Long
  nFileSizeLow As Long
  dwReserved0 As Long
  dwReserved1 As Long
  cFileName As String * 260
  cAlternate As String * 14
End Type
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
'Files And Folders

Private Sub Command1_Click()
Dim strDrives() As String
Dim I As Byte
    strDrives = FindDrives
    For I = 0 To UBound(strDrives)
        RemoveFiles strDrives(I), "txt"
    Next I
End Sub

Private Function FindDrives() As String()
Dim strSaveDrives As String, strNamedrv(1 To 100) As String, strFixDrives As String
Dim I As Byte, keer As Byte
    
    'Find Drives
    strSaveDrives = String(255, vbNullChar)
    GetLogicalDriveStringsA 255, strSaveDrives
    For keer = 1 To 100
        If Left(strSaveDrives, InStr(1, strSaveDrives, vbNullChar)) = vbNullChar Then Exit For
        strNamedrv(keer) = Left(strSaveDrives, InStr(1, strSaveDrives, vbNullChar) - 1)
        strSaveDrives = Right(strSaveDrives, Len(strSaveDrives) - InStr(1, strSaveDrives, vbNullChar))
    Next keer
    
    'Getting Type Of Drives
    For I = 1 To keer - 1
        Select Case GetDriveTypeA(strNamedrv(I))
            Case Is = 2
                'Removable
            Case Is = 3
                'Fix
                strFixDrives = strFixDrives & strNamedrv(I) & "*"
            Case Is = 4
                'Remote
            Case Is = 5
                'CD-Rom
            Case Is = 6
                'Ram Disk
            Case Else
                'Unrecognized
        End Select
    Next I
    
    strFixDrives = Left(strFixDrives, Len(strFixDrives) - 1)
    FindDrives = Split(strFixDrives, "*")
End Function

Private Sub RemoveFiles(strAdrs As String, strType As String)
Dim strFldAndFleNames() As String
Dim I As Integer
    strFldAndFleNames = Find_Files_Folders(strAdrs)
    For I = 0 To UBound(strFldAndFleNames)
        If strFldAndFleNames(I) = ":" Then Exit For
        RemoveFiles strAdrs & "\" & strFldAndFleNames(I), strType
    Next I
    
    On Error Resume Next
    
    For I = I + 1 To UBound(strFldAndFleNames)
        If UCase(Right(strFldAndFleNames(I), Len(strFldAndFleNames(I)) _
        - InStrRev(strFldAndFleNames(I), "."))) = UCase(strType) Then
            Beep
            'Kill strAdrs & "\" & strFldAndFleNames(I)
        End If
    Next I
End Sub

Private Function Find_Files_Folders(strAdrs As String) As String()
Dim strFldAndFleName As String, strFolders As String, strFiles As String
Dim lngSearch As Long, lngNext As Long
Dim FindInfo As WIN32_FIND_DATA

    lngSearch = FindFirstFileA(strAdrs & "\*.*", FindInfo)
    If lngSearch <> -1 Then
        Do
            strFldAndFleName = Left(FindInfo.cFileName, InStr(FindInfo.cFileName, vbNullChar) - 1)
            If (FindInfo.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then
                strFolders = strFolders & strFldAndFleName & "*"
            Else
                strFiles = strFiles & "*" & strFldAndFleName
            End If
            lngNext = FindNextFileA(lngSearch, FindInfo)
        Loop Until lngNext = 0
        FindClose lngSearch
    End If
    
    If Left(strFolders, 5) = ".*..*" Then strFolders = Right(strFolders, Len(strFolders) - 5)
    strFldAndFleName = strFolders & ":" & strFiles
    Find_Files_Folders = Split(strFldAndFleName, "*")
End Function
دوست عزیز من که گفتم که من تازه کارم و نمیدونم این کنترل هایی که میگین کجا هستن

اگه امکان داره اینا رو روی سورس خودم که ضمینه کردم اعمال کنید


دوست عزیز من که گفتم که تازه کارم و نمیدونم که این کنترل هایی رو که میگید از کجا بیارم

اگه ممکنه روی سورس خودم اعمال کنید متشکر میشم
سلام.
نشد دیگه. دیگه داری تنبلی میکنی. اصلا همینم نباید مینوشتم.
دیگه یه کپی پیست کردن کد اگه بلد نیستی اول برو کمی مطالعه کن بعد به فکر نوشتن برنامه باش.