2013-11-07 3 views
0

Я пытаюсь переместить файлы csv из одного места в другое на основе даты создания.копировать файлы из одного местоположения в другое место с помощью VB и на основе созданной даты

Но код, который я использую в нерабочем состоянии, показывает ошибку, что sample.csv уже используется другим процессом, как я могу решить эту проблему?

это сообщение об ошибке «Ошибка: System.Reflection.TargetInvocationException: Исключение было выбрано целью вызова. ---> System.IO.IOException: процесс не может получить доступ к файлу« C: \ New » папка \ Test.txt ', потому что она используется другим процессом. at System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) в System.IO.File.InternalCopy (String sourceFileName, String destFileName, Boolean overwrite) в ST_b8571e8d94a54a80ab50a1e221d93b11.vbproj.ScriptMain.Main() --- Конец внутренней трассировки стека исключений --- в System.RuntimeMethodHandle._InvokeMethodFast (целевого объекта, Object [] аргументы, SignatureStruct & Sig, methodAttributes methodAttributes, Рунт imeTypeHandle typeOwner) на System.RuntimeMethodHandle.InvokeMethodFast (целевой объект, Object [] аргументы, подпись Sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) на System.Reflection.RuntimeMethodInfo.Invoke (OBJ объекта, BindingFlags invokeAttr, Связующее связующего, объект [] параметры, CultureInfo культура, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, связующее связующее, Object [] параметры, культура CultureInfo) в System.RuntimeType.InvokeMember (имя строки, привязкаFlags bindingFlags, Binder binder, Object target, Object [] providedArgs, ParameterModifier [], Culture Culture, String [] namedParams) в System.Type.InvokeMember (имя строки, BindingFlags invokeAttr, связующее связующее, цель объекта, объект [] args, культура CultureInfo) на Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()»

Public Sub Main() 
     Dim csvFilesToday = New List(Of String) 
     Dim sourceDir As String = "C:\New folder" 
     Dim backupDir As String = "C:\New folder (2)" 

     For Each csv In Directory.GetFiles(sourceDir, "*.csv", IO.SearchOption.AllDirectories) 
      If File.GetCreationTime(csv).Date = Date.Today Then 
       File.Copy(Path.Combine(sourceDir, csv), Path.Combine(backupDir, csv), True) 
      End If 
     Next 
     Dts.TaskResult = ScriptResults.Success 
    End Sub 

End Class 
+0

Что точная ошибка? –

ответ

1

Вы должны определить процесс, который держит блокировку на файл.

У меня есть поподробнее о том, как использовать Process Explorer для достижения этой цели: File in use by another process

Быстро, хотя, хотя это, чтобы закрыть Excel, если вы его открыть. В противном случае, проверьте текстовый редактор (ы)

0

Это не исправить вашу проблему, но это улучшит ваш код:

Public Sub Main() 
    Dim sourceDir As New DirectoryInfo("C:\New folder") 
    Dim backupDir As String = "C:\New folder (2)" 

    'Using DirectoryInfo.EnumerateFiles will reduce the total number of disk accesses 
    For Each csv In sourceDir.EnumerateFiles("*.csv", SearchOption.AllDirectories.Where(Function(i) i.CreationTime >= Date.Today) 
     Try 
      File.Copy(csv.FullName, Path.Combine(backupDir, csv.Name), True) 
     Catch Ex As IOException 
      'Do something with the error here 

     End Try 
    Next csv 

    Dts.TaskResult = ScriptResults.Success 
End Sub 
Смежные вопросы