Hallo zusammen!
folgendes: Ich lade per Webservice Dateien von einem Ordner in einen anderen Ordner auf einem anderen Rechner.
Die Methode auf dem Webservice sehen folgendemassen aus:
<WebMethod()> _
Public Function UploadFile(ByVal docbinaryarray As Byte(), ByVal docname As _
String) As Boolean
Dim strdocPath As String
strdocPath = "C:\Inetpub\wwwroot\FileUploadDownloadSvc\temp\" + docname
Dim objfilestream = New System.IO.FileStream(strdocPath, _
System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite)
objfilestream.Write(docbinaryarray, 0, docbinaryarray.Length)
objfilestream.Close()
Return True
End Function Auf dem Client, wo die Quelldateien liegen, läuft folgendes Programm:
Public Class Form1
Inherits System.Windows.Forms.Form
' FileSystemWatcher-Objekt erzeugen
Dim WithEvents FileSystemWatcher1 As New System.IO.FileSystemWatcher
Private Function UploadFile(ByVal sFilePath As String, ByVal sFileName As _
String)
Dim myUploadService As New FileUploadWebService.Service1
Dim objfilestream = New System.IO.FileStream(sFilePath, _
System.IO.FileMode.Open, System.IO.FileAccess.Read)
Dim len As Integer = objfilestream.Length
Dim mybytearray(len) As Byte
Dim lRet As Long
objfilestream.Read(mybytearray, 0, len)
lRet = myUploadService.UploadFile(mybytearray, sFileName)
objfilestream.Close()
myUploadService = Nothing
objfilestream = Nothing
Return (lRet)
End Function
Public Function FileInUse(ByVal sFile As String) As Boolean
' Prüft, ob die angegeben Datei aktuell durch eine
' andere Anwendung in Benutzung ist
Dim bInUse As Boolean = False
If FileExists(sFile) Then
Try
' Versuch, Datei EXKLUSIV zu öffnen
Dim F As Short = FreeFile()
FileOpen(F, sFile, OpenMode.Binary, OpenAccess.ReadWrite, _
OpenShare.LockReadWrite)
FileClose(F)
Catch
' Bei Fehler ist die Datei in Benutzung
bInUse = True
End Try
End If
' Rückgabewert
Return (bInUse)
End Function
Public Function FileExists(ByVal sFile As String) As Boolean
' Prüft, ob die angegeben Datei existiert
Return (System.IO.File.Exists(sFile))
End Function
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
' Verzeichnis, dessen Dateien ermittelt werden sollen
Dim sPath As String
Dim sFullPath As String
Dim lRet As Long
' ggf. abschließenden Backslash entfernen
sPath = "D:\Inetpub\wwwroot\nsn-transfer\out" '"S:\out"
If sPath.EndsWith("\") And sPath.Length > 3 Then
sPath = sPath.Substring(0, sPath.Length - 1)
End If
' Directory-Object erstellen
Dim oDir As New System.IO.DirectoryInfo(sPath)
' alle Dateien des Ordners
Dim oFiles As System.IO.FileInfo() = oDir.GetFiles()
' Datei-Array durchlaufen und in
' ListBox übertragen
Dim oFile As System.IO.FileInfo
For Each oFile In oFiles
Do Until FileInUse(sFullPath) = False
Loop
lRet = UploadFile(sFullPath, oFile.ToString)
'End If
If lRet = -1 Then 'Übertragen
Kill(sFullPath)
'AddStatus("File moved: " & sFileName.ToString)
Else 'Fehler bei der Übertragung
'AddStatus("Error moving file: " & sFileName.ToString)
End If
Next
End
End Sub
End Class Und nun mein Problem: Laut meinem Chef, wird bei jedem Upload ein Byte angehängt - Bsp: ich erstelle im Quellpfad einen leere Textdatei mit 0 kb, ankommen tut ein leeres Dokument mit 1 kb.
Einen Fehler kann ich jedoch im Code nicht finden. Könnt ihr mir eventuell helfen?
Kurze Erklärung: Wichtig ist im Client-Code die Funktion "UploadFile" - Entweder hier ist was falsch, oder auf dem Webservice. Aber ich sehe eben keinen überflüssigen Byte? :/
Gruss Breaker
Beitrag wurde zuletzt am 29.04.08 um 14:06:22 editiert. |