Ich habe ein eigenartiges Problem dem ich nicht auf die schliche komme. Ich bin mir nicht mal sicher ob es sich hier um ein Programmier-Problem oder ein Windows-Problem handelt. Es ist wie folgt:
Ich habe ein Programm was sich von einem Netzwerkpfad (nicht Netzlaufwerk) eine Datei kopiert. Und genau hier das Problem. Wenn ich das Programm (welches als Dienst läuft) starte kopiert er das erste mal die Datei nicht weil er sagt die ZIEL-Datei sei in Verwendung. dann läuft ein Timer und nach 5 Minuten startet der Kopiervorgang wieder (gleiche Ziel und Quell-Datei, nichts an beiden Dateien geändert) und es klappt. innerhalb dieser 5 Minuten versucht die Kopier-Prozedur alle 10 Sekunden die Datei zu kopieren und es klappt nicht (mittels Schleife wie im Code unten zu sehen ist). Wenn das Programm dann im 5-Minuten Modus käuft klappt es in weiterer Folge immer und die Datei wird erfolreich kopiert. nur beim 1. mal nicht.
Interessant ist noch folgendes: wenn ich den Timer runterdrehe, so das er alle 2 Minuten feuert klappt es mal ja, mal nein (zu 95% abwechselnd).
Hier der Code der Kopier-Funktion welche vom Timer aufgerufen wird:
[highlight=vbnet]
Public Sub CopyImportFile()
Dim CountCopyTries_act As Integer = 0
Dim CountCopyTries_ms As Integer = 0
Dim retvalue As Long
Try
Do
If File.Exists(ImportFilePersons_temp) Then File.Delete(ImportFilePersons_temp)
If CountCopyTries_act = 0 Then WriteLog("Copy File " & ImportFilePersons & " to " & ImportFilePersons_temp)
retvalue = CopyFile(ImportFilePersons, ImportFilePersons_temp, 0)
WriteLog("CopyImportFile: " & retvalue)
CountCopyTries_act = CountCopyTries_act + 1
CountCopyTries_ms = CountCopyTries_ms + 10
If retvalue = 1 Then
Thread.CurrentThread.Sleep(10000) 'wait 10 seconds
End If
WriteLog("Try Nr. " & CountCopyTries_act & " waited for " & CountCopyTries_ms & " seconds")
Loop Until retvalue = 0 Or CountCopyTries_act = CountCopyTries
If CountCopyTries_act = CountCopyTries Then
WriteLog("Copying of File " & ImportFilePersons & " not possible")
End If
Catch ex As Exception
WriteLog("CopyImportFile: " & ex.Message)
End Try
End Sub
[/highlight]
Hier die Funktion CopyFile:
[highlight=vbnet]
Public Declare Function CopyFile Lib "kernel32.dll" _
Alias "CopyFileA" ( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
[/highlight]
Ich habe keine Ahnung was das sein kann... habt ihr vielleicht eine idee?
LG
michael
Comment