[英]Using C# Upload function in VB.Net
這是非常具體的。 我需要在VB.Net程序中使用C#函數的幫助,該函數位於DLL中,並且代碼如下:
public void UploadData(string FTPUri, string FilePath, string FileName,
string UserName, string Password)
{
StatusUp = new Int64[2];
reqFTP = (FtpWebRequest)FtpWebRequest.Create(FTPUri + FileName);
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(UserName, Password);
FileInfo fileInf = new FileInfo(FilePath);
FileStream fs = fileInf.OpenRead();
// modifyied code
int bytesSize = 0;
byte[] UpBuffer = new byte[2048];
ftpStream = reqFTP.GetRequestStream();
bytesSize = fs.Read(UpBuffer, 0, UpBuffer.Length);
while ((bytesSize = fs.Read(UpBuffer, 0, UpBuffer.Length)) > 0)
{
StatusUp[0] = StatusUp[0] + UpBuffer.Length;
StatusUp[1] = fileInf.Length;// +startPointInt;
ftpStream.Write(UpBuffer, 0, bytesSize);
}
fs.Close();
ftpStream.Close();
}
在我的vb.net程序中,我這樣稱呼它:
Dim FtpUpload As FTPUtility.ftpUtility = New FTPUtility.ftpUtility
FtpUpload.UploadData("ftp://ftp.xxx.xx", "C:\winzip.log", "/winzip.log", "uploader", "xxxx")
可以正常工作,只是完成后它只有2個字節。 我對C#的了解不足,無法弄清楚C#代碼是否錯誤(我沒有寫出來,而是那位離開公司的人),但是似乎某個地方沒有關閉文件或其他東西。
有任何想法嗎?
bytesSize = fs.Read(UpBuffer, 0, UpBuffer.Length);
while ((bytesSize = fs.Read(UpBuffer, 0, UpBuffer.Length)) > 0)
{
StatusUp[0] = StatusUp[0] + UpBuffer.Length;
// etc..
}
這里有兩個紅旗。 第一個是導致問題的原因,在進入while循環之前需要執行額外的fs.Read()調用。 那是您不使用也不上傳的2048字節。 只需刪除該行。 通過使用for(;;)和break可以避免這類錯誤。
StatusUp [0]分配看起來很糟糕,應該添加bytesSize而不是UpBuffer.Length。 否則,沒有什么副作用。
它是C#,而不是C ++。
使用http://www.developerfusion.com/tools/convert/csharp-to-vb/進行了轉換
Public Sub UploadData(FTPUri As String, FilePath As String, FileName As String, UserName As String, Password As String)
'FtpWebRequest reqFTP;
StatusUp = New Int64(1) {}
reqFTP = DirectCast(FtpWebRequest.Create(FTPUri & FileName), FtpWebRequest)
reqFTP.Method = WebRequestMethods.Ftp.UploadFile
reqFTP.UseBinary = True
reqFTP.Credentials = New NetworkCredential(UserName, Password)
'StreamReader ReadStream = new StreamReader(FilePath);
Dim fileInf As New FileInfo(FilePath)
Dim fs As FileStream = fileInf.OpenRead()
' modifyied code
Dim bytesSize As Integer = 0
Dim UpBuffer As Byte() = New Byte(2047) {}
'reqFTP.ContentLength = ftpResponse.Length;
'Stream ftpStream = reqFTP.GetRequestStream();
ftpStream = reqFTP.GetRequestStream()
bytesSize = fs.Read(UpBuffer, 0, UpBuffer.Length)
While (InlineAssignHelper(bytesSize, fs.Read(UpBuffer, 0, UpBuffer.Length))) > 0
'StatusUp[0] = ftpStream.Length;
StatusUp(0) = StatusUp(0) + UpBuffer.Length
StatusUp(1) = fileInf.Length
' +startPointInt;
ftpStream.Write(UpBuffer, 0, bytesSize)
End While
fs.Close()
ftpStream.Close()
'response.Close();
End Sub
Public Sub UploadData(FTPUri As String, FilePath As String, FileName As String, UserName As String, Password As String)
StatusUp = New Int64(1) {}
reqFTP = DirectCast(FtpWebRequest.Create(FTPUri & FileName), FtpWebRequest)
reqFTP.Method = WebRequestMethods.Ftp.UploadFile
reqFTP.UseBinary = True
reqFTP.Credentials = New NetworkCredential(UserName, Password)
Dim fileInf As New FileInfo(FilePath)
Dim fs As FileStream = fileInf.OpenRead()
' modifyied code
Dim bytesSize As Integer = 0
Dim UpBuffer As Byte() = New Byte(2047) {}
ftpStream = reqFTP.GetRequestStream()
bytesSize = fs.Read(UpBuffer, 0, UpBuffer.Length)
While (InlineAssignHelper(bytesSize, fs.Read(UpBuffer, 0, UpBuffer.Length))) > 0
StatusUp(0) = StatusUp(0) + UpBuffer.Length
StatusUp(1) = fileInf.Length
' +startPointInt;
ftpStream.Write(UpBuffer, 0, bytesSize)
End While
fs.Close()
ftpStream.Close()
End Sub
投票或接受(如果可行)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.