Копирование файлов с флешки - VB

Узнай цену своей работы

Формулировка задачи:

помогите написать мини программку При подключении флешки(любой) скопировать вордовские файлы .doc и .docx на жесткий диск. для каждого подключения флешки создавать новую папку. Программка должна работать в фоне...

Решение задачи: «Копирование файлов с флешки»

textual
Листинг программы
  1. Option Explicit
  2.  
  3.     'On Error Resume Next
  4.  
  5.     Dim oFSO, WshShell, foldDesktop, Root, foldDestination, objWMIService, objEvents, objReceivedEvent
  6.  
  7.     Set oFSO = CreateObject("Scripting.FileSystemObject")
  8.    
  9.     Set WshShell = CreateObject("WScript.Shell")
  10.  
  11.     foldDesktop = WshShell.SpecialFolders.Item("Desktop")
  12.  
  13.     'Создаем папку на рабочем столе для хранения документов
  14.    foldDestination = foldDesktop & "\" & "Flash_Docs_" & ClearFilename(Date & "_" & Time, ".")
  15.  
  16.     oFSO.CreateFolder foldDestination
  17.  
  18.     Set WshShell = Nothing
  19.  
  20.     Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
  21.  
  22.     Set objEvents = objWMIService.ExecNotificationQuery _
  23.         ("SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE " & _
  24.         "TargetInstance ISA 'Win32_LogicalDisk'" & _
  25.         " AND TargetInstance.DriveType = 2")
  26.  
  27.     Do While(true)
  28.        
  29.         Set objReceivedEvent = objEvents.NextEvent
  30.  
  31.         Set Root = oFSO.GetFolder(objReceivedEvent.TargetInstance.Name)
  32.            
  33.         scanFolder Root, foldDestination
  34.                    
  35.         Set Root = Nothing    
  36.  
  37.    Loop
  38.  
  39. Sub scanFolder(fold, foldDestination)
  40.     On Error Resume Next
  41.    
  42.     Dim myfiles, fil, myFolders, subf, NewFileName
  43.  
  44.     Set myfiles = fold.Files
  45.    
  46.     If fold.Attributes >= 1024 Then Exit Sub 'проходим мимо симлинков
  47.    
  48.     For Each fil In myfiles
  49.  
  50.         If LCase(Right(fil.Name, 4)) = ".doc" Or _
  51.            LCase(Right(fil.Name, 5)) = ".docx" Then
  52.            
  53.             'Проверяем, существует ли файл с таким именем в целевой папке - если да, переименовуем
  54.            NewFileName = GetEmptyName(foldDestination, ClearFilename(fil.Name, "."), 0)
  55.  
  56.             fil.Copy foldDestination & "\" & NewFileName
  57.  
  58.         End If
  59.        
  60.     Next
  61.    
  62.     Set myfiles = Nothing
  63.  
  64.     Set myFolders = fold.Subfolders
  65.  
  66.     For Each subf In myFolders
  67.         scanFolder subf, foldDestination
  68.     Next
  69.  
  70.     Set myFolders = Nothing
  71.  
  72. End Sub
  73.  
  74.  
  75. 'Получает незанятое имя файла по указанному пути.
  76. 'Если файл уже существует, дописывает постфикс в виде цифры в скобках:
  77. ' -> Имя_файла(цифра).расширение_имени_файла
  78. Function GetEmptyName(sPath, sFileName, FileNumber) 'FileNumber is optional: must = 0
  79.  
  80.     Dim FSO, FileOnlyName, FileExtension, CheckFileName
  81.  
  82.     Set FSO = CreateObject("Scripting.FileSystemObject")
  83.  
  84.     If InStr(sFileName, ".") = 0 Then
  85.    
  86.         FileOnlyName = sFileName: FileExtension = ""
  87.        
  88.       Else
  89.        
  90.         FileOnlyName = Left(sFileName, InStrRev(sFileName, ".") - 1)
  91.        
  92.         FileExtension = Mid(sFileName, Len(FileOnlyName) + 1)
  93.  
  94.     End If
  95.  
  96.     CheckFileName = IIf(FileNumber = 0, sFileName, FileOnlyName & "(" & FileNumber & ")" & FileExtension)
  97.  
  98.     If FSO.fileExists(sPath & "\" & CheckFileName) Then
  99.    
  100.         FileNumber = FileNumber + 1
  101.    
  102.         GetEmptyName = GetEmptyName(sPath, sFileName, FileNumber)
  103.    
  104.       Else
  105.    
  106.         GetEmptyName = CheckFileName
  107.        
  108.     End If
  109.  
  110.     Set FSO = Nothing
  111.  
  112. End Function
  113.  
  114. 'Заменяет символы, которые не могут быть использованы в имени файла на указанный разделитель
  115. Function ClearFilename(sFileName, sNewDelimiter)
  116.  
  117.     Dim BadChars, Char
  118.  
  119.     BadChars = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
  120.  
  121.     For Each Char In BadChars
  122.  
  123.         If InStr(sFileName, Char) <> 0 Then sFileName = Replace(sFileName, Char, sNewDelimiter)
  124.  
  125.     Next
  126.  
  127.     ClearFilename = sFileName
  128.  
  129. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы