PDA

View Full Version : حذف فایل رو با یک پسوند خاص



aliooali
شنبه 16 مهر 1390, 18:08 عصر
من میخوام یک فایل رو با یک پسوند خاص رو تو کل سیستم ( کل درایوها ) سرچ کنم و بعد تمام چیزهایی رو که پیدا کرده رو پاک کنم .

محسن واژدی
شنبه 16 مهر 1390, 21:06 عصر
سلام علیکم
برای اینکار باید از جستجوگر استفاده کنید،
حتی با کنترل های drive-list ,file-list و dir-list هم میتوانید یک جستجوگر برحسب نیاز ایجاد کنید
کنترل های در این زمینه زیاد هستند، هم در این انجمن و هم در سایر سایت ها مانند planet-source-code.com میتوانید نمونه و کنترلهای جستجوگر مختلفی را بیابید

موفق باشید

aliooali
شنبه 16 مهر 1390, 23:26 عصر
دوست عزیز اگه امکانش هست یه سورس بزارید که هم سرچ کنه و هم اونایی رو که سرچ کرده پاک کنه

باتشکر

aliooali
شنبه 16 مهر 1390, 23:48 عصر
به سورس که ضمینه کردم اگه امکانش هست کد پاک کردن محتویاتی که داخل text نشان داده میشود اضافه کنید ممنون میشم76367

arash020
یک شنبه 17 مهر 1390, 03:20 صبح
سلام

توی eaglevb.blogfa.com چندتا نمونه برنامه کامل هست ببین چطورن؟
شاید مفیدت باشن...

موفق باشی

aliooali
یک شنبه 17 مهر 1390, 22:28 عصر
دوست عزیز من که چیزی پیدا نکردم تو این وب که داده بودین که به موضوع مربوط باشه

بازم مرسی

محسن واژدی
سه شنبه 19 مهر 1390, 01:35 صبح
به سورس که ضمینه کردم اگه امکانش هست کد پاک کردن محتویاتی که داخل text نشان داده میشود اضافه کنید

کد های زیر را جایگزین کدهای سورستون کنید،:



'---------------------------------------'

' htpp://www.VisualBasic.Blogfa.com '

' AliMedia_vb@Yahoo.com '

'---------------------------------------'


Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100

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 * MAX_PATH
cAlternate As String * 14
End Type
Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function
Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
On Error Resume Next
Dim FileName As String ' Walking filename variable...
Dim DirName As String ' SubDirectory Name
Dim dirNames() As String ' Buffer for directory name entries
Dim nDir As Integer ' Number of directories in this path
Dim i As Integer ' For-loop counter...
Dim hSearch As Long ' Search Handle
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
If Right(path, 1) <> "\" Then path = path & "\"
' Search for subdirectories.
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = StripNulls(WFD.cFileName)
' Ignore the current and encompassing directories.
If (DirName <> ".") And (DirName <> "..") Then
' Check for directory with bitwise comparison.
If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
dirNames(nDir) = DirName
DirCount = DirCount + 1
nDir = nDir + 1
ReDim Preserve dirNames(nDir)
End If
End If
Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
Loop
Cont = FindClose(hSearch)
End If
' Walk through this directory and sum file sizes.
hSearch = FindFirstFile(path & SearchStr, WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = StripNulls(WFD.cFileName)
If (FileName <> ".") And (FileName <> "..") Then
FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
FileCount = FileCount + 1
SetAttr path & FileName, vbNormal
Kill path & FileName
List1.AddItem path & FileName
End If
Cont = FindNextFile(hSearch, WFD) ' Get next file
Wend
Cont = FindClose(hSearch)
End If
' If there are sub-directories...
If nDir > 0 Then
' Recursively walk into them...
For i = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
Next i
End If
End Function
Sub Cmd_Search_Click()
Dim SearchPath As String, FindStr As String
Dim FileSize As Long
Dim NumFiles As Integer, NumDirs As Integer
'Screen.MousePointer = vbHourglass
List1.Clear
SearchPath = Text1.Text
FindStr = Text2.Text
FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
Text4.Text = "Size of files found under " & SearchPath & " = " & Format((FileSize / 1024), "#,###,###,##0") & " KB"
'Screen.MousePointer = vbDefault
End Sub




موفق باشید

aliooali
چهارشنبه 20 مهر 1390, 00:49 صبح
محسن جان این کدها که همون کدهای سورسی هستن که ضمینه کردم !!!!!!!!!

محسن واژدی
پنج شنبه 21 مهر 1390, 17:31 عصر
محسن جان این کدها که همون کدهای سورسی هستن که ضمینه کردم !!!!!!!!!

سلام
احتمالا" هنوز کدها بررسی نکرده اید ،
بله، همان کدهای ضمیمه شده تان هستند+دستورات خط 95و 96 که فایل یافت شده را پیش از افزوده شدن به لیست از درایو حذف میکند

موفق باشید

aliooali
پنج شنبه 21 مهر 1390, 17:44 عصر
آقا محسن همچین چیزی که شما میگید اتفاق نمیقته . چون بعد از اینکه سرچ رو انجام میده هنوز فایل ما درون همون درایو هستش

محسن واژدی
پنج شنبه 21 مهر 1390, 18:41 عصر
تست کردم، مشکلی نداشت، شاید پسوندهای فایل را تنظیم نکرده باشد

aliooali
پنج شنبه 21 مهر 1390, 23:08 عصر
من میخوام عکس ها رو پاک کنه ولی پاک میکنه میشه راهنمایی کنید که چطوری میشه این کارو کرد

محسن واژدی
جمعه 22 مهر 1390, 00:02 صبح
سلام
کدهای زیر را جایگزین روال FindFilesAPI کنید:

Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
On Error Resume Next
Dim FileName As String ' Walking filename variable...
Dim DirName As String ' SubDirectory Name
Dim dirNames() As String ' Buffer for directory name entries
Dim nDir As Integer ' Number of directories in this path
Dim i As Integer ' For-loop counter...
Dim hSearch As Long ' Search Handle
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
SearchStr = Trim(SearchStr)
If Right(path, 1) <> "\" Then path = path & "\"
' Search for subdirectories.
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = StripNulls(WFD.cFileName)
' Ignore the current and encompassing directories.
If (DirName <> ".") And (DirName <> "..") Then
' Check for directory with bitwise comparison.
If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
dirNames(nDir) = DirName
DirCount = DirCount + 1
nDir = nDir + 1
ReDim Preserve dirNames(nDir)
End If
End If
Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
Loop
Cont = FindClose(hSearch)
End If
' Walk through this directory and sum file sizes.
Dim tar_ext
For Each tar_ext In Split(SearchStr, ";")
If tar_ext > "" Then
hSearch = FindFirstFile(path & tar_ext, WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = StripNulls(WFD.cFileName)
If (FileName <> ".") And (FileName <> "..") Then
FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
FileCount = FileCount + 1

SetAttr path & FileName, vbNormal
Kill path & FileName

List1.AddItem path & FileName
End If
Cont = FindNextFile(hSearch, WFD) ' Get next file
DoEvents
Wend
Cont = FindClose(hSearch)
End If
End If

Next
' If there are sub-directories...
If nDir > 0 Then
' Recursively walk into them...
For i = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
DoEvents
Next i
End If
End Function


پسوند های بیشتر از یکی را بصورت *.bmp;*.jpg بنویسید

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

موفق باشید

aliooali
جمعه 22 مهر 1390, 01:51 صبح
مرسی از اینکه کمکم کردن

Restlesa
جمعه 22 مهر 1390, 21:07 عصر
يه مثال در رابطه با حذف كردن پسوندهاي بيشتر از يكي با توجه به تابع FindFilesAPI برام قرار ميديد ؟؟؟ البته در كل سيستم. منظورم اين هستش كه مثل برنامه اي كه دوستمون ضميمه كردن نباشه و فقط در يه درايو مورد نظر عمليات جستجو انجام بشه :خجالت:

محسن واژدی
شنبه 23 مهر 1390, 15:34 عصر
سلام
تابع پست 13 جستجو برای چند پسوند را انجام میدهد ، کافی است کدهای آنرا در سورس جستجوگری که در این تاپیک وجود دارد جایگزین کنید و عمل جستجو را انجام دهید

موفق باشید

Restlesa
یک شنبه 24 مهر 1390, 11:57 صبح
ممنون یه سوال دیگه هم داشتم
بر اساس این سورس که در تاپیک قرار داده شده ما فقط می تونیم یه پسوند خاص رو در یه درایو خاص جستجو کنیم
حالا اگر بخوایم یه پسوند خاص رو در کل سیستم جستجو کنیم باید چی کار کنیم ؟؟؟ :متفکر:

محسن واژدی
یک شنبه 24 مهر 1390, 12:27 عصر
سلام
کد زیر هارددیسک را جستجو میکند:

Sub SearchInAllDrives()
Dim ii%
Dim path$
Dim FindStr As String
Dim FileSize As Long
List1.Clear
For ii = 67 To 90
path = Chr(ii) & ":\"
If Not Dir(path) = Empty Then
FileSize = FindFilesAPI(path, FindStr, 0, 0)
End If
DoEvents
Next ii
End Sub


فقط ببخشید خیلی نامرتب است

موفق باشید

Restlesa
یک شنبه 24 مهر 1390, 13:47 عصر
ممنونم
نحوه کار باهاشم توضیح میدی؟؟؟
کجای برنامه باید فراخوانیش کنم ؟؟؟

محسن واژدی
یک شنبه 24 مهر 1390, 14:16 عصر
در کنار تابع FindFilesAPI که در ماژول فرم قرار دارد
برای استفاده فقط بایستی انرا با یک فراخوانی ساده اجرا کنید

البته نکته ای که وجود دارد، این است که برخی از حلقه های بکار رفته در روال FindFilesAPI، نیازمند DoEvents هستند، که بایستی این دستور را دستی در آنها وارد کنید

موفق باشید

Restlesa
یک شنبه 24 مهر 1390, 14:26 عصر
در کنار تابع FindFilesAPI که در ماژول فرم قرار دارد
برای استفاده فقط بایستی انرا با یک فراخوانی ساده اجرا کنید

در کجای پروژه باید فراخوانی بشه ؟؟؟
در دکمه Search ؟؟؟


البته نکته ای که وجود دارد، این است که برخی از حلقه های بکار رفته در روال FindFilesAPI، نیازمند DoEvents هستند، که بایستی این دستور را دستی در آنها وارد کنید

میشه دقیقا بگی کدوم حلقه ها تا خطای احتمالی پیش نیاد ؟؟؟

محسن واژدی
یک شنبه 24 مهر 1390, 15:24 عصر
در کجای پروژه باید فراخوانی بشه ؟؟؟
در دکمه Search ؟؟؟

میتوانید دستور فراخوانی این تابع را هم جایگزین دستورات دکمه search و هم آن را در یک دکمه جدید قرار دهید



میشه دقیقا بگی کدوم حلقه ها تا خطای احتمالی پیش نیاد ؟؟؟

خطایی پیش نمیاد فقط فرم برنامه تا اتمام جستجو قادر به انجام هیچ عکس العملی نیست
فقط یکی از حلقه ها نیازمند DoEvents بودند، کل تابع را مجدد ضمیمه پست کردم:

Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
On Error Resume Next
Dim FileName As String ' Walking filename variable...
Dim DirName As String ' SubDirectory Name
Dim dirNames() As String ' Buffer for directory name entries
Dim nDir As Integer ' Number of directories in this path
Dim i As Integer ' For-loop counter...
Dim hSearch As Long ' Search Handle
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
SearchStr = Trim(SearchStr)
If Right(path, 1) <> "\" Then path = path & "\"
' Search for subdirectories.
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = StripNulls(WFD.cFileName)
' Ignore the current and encompassing directories.
If (DirName <> ".") And (DirName <> "..") Then
' Check for directory with bitwise comparison.
If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
dirNames(nDir) = DirName
DirCount = DirCount + 1
nDir = nDir + 1
ReDim Preserve dirNames(nDir)
End If
End If
Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
Caption = path & DirName
DoEvents
Loop
Cont = FindClose(hSearch)
End If
' Walk through this directory and sum file sizes.
Dim tar_ext
For Each tar_ext In Split(SearchStr, ";")
If tar_ext > "" Then
hSearch = FindFirstFile(path & tar_ext, WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = StripNulls(WFD.cFileName)
If (FileName <> ".") And (FileName <> "..") Then
FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
FileCount = FileCount + 1

SetAttr path & FileName, vbNormal
Kill path & FileName

List1.AddItem path & FileName
End If
Cont = FindNextFile(hSearch, WFD) ' Get next file
DoEvents
Wend
Cont = FindClose(hSearch)
End If
End If

Next
' If there are sub-directories...
If nDir > 0 Then
' Recursively walk into them...
For i = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
DoEvents
Next i
End If
End Function


موفق باشید