我试图读取本地文件并将其上传到ftp服务器上。当我读取图像文件时,一切正常,但是当我读取doc或docx文件时,FileStream返回length = 0.这是我的代码: 我检查了一些其他文件,它似乎只适用于图像,它返回0任何其他文件
if (!ftpClient.FileExists(fileName))
{
try
{
ftpClient.ValidateCertificate += (control, e) => { e.Accept = true; };
const int BUFFER_SIZE = 64 * 1024; // 64KB buffer
byte[] buffer = new byte[BUFFER_SIZE];
using (Stream readStream = new FileStream(tempFilePath, FileMode.Open, FileAccess.Read))
using (Stream writeStream = ftpClient.OpenWrite(fileName))
{
while (readStream.Position < readStream.Length)
{
buffer.Initialize();
int bytesRead = readStream.Read(buffer, 0, BUFFER_SIZE);
writeStream.Write(buffer, 0, bytesRead);
}
readStream.Flush();
readStream.Close();
writeStream.Flush();
writeStream.Close();
DeleteTempFile(tempFilePath);
return true;
}
}
catch (Exception ex)
{
return false;
}
}
我无法找到它的错误。你能帮帮我吗?
答案 0 :(得分:1)
虽然这不能解答您的具体问题,但您实际上并不需要知道流的长度。只需继续阅读,直到你读取零长度。 A zero byte read is guaranteed to indicate the the end of any stream
返回值
输入:System.Int32
读入缓冲区的总字节数。如果当前没有多个字节可用,则这可能小于请求的字节数,如果已到达流的末尾,则可以小于零(0)。
while (true)
{
int bytesRead = readStream.Read(buffer, 0, BUFFER_SIZE);
if(bytesRead==0)
{
break;
}
writeStream.Write(buffer, 0, bytesRead);
}
或者:
readStream.CopyTo(writeStream);
可能是说明目标最简洁的方法......
答案 1 :(得分:0)
这只是一个愚蠢的错误,我有两个fileupload,我已经保存了另一个文件上传,所以它创建了一个零长度的文件。因为看起来代码工作正常。 谢谢大家。