【发布时间】:2015-05-12 08:12:11
【问题描述】:
我正在尝试读取本地文件并将其上传到 ftp 服务器。当我读取图像文件时,一切正常,但是当我读取 doc 或 docx 文件时,FileStream 返回长度 = 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;
}
}
我找不到它有什么问题。你能帮帮我吗?
【问题讨论】:
-
它只发生在 doc/docx 文件上吗?访问和图片文件有区别吗?
-
你是说
readStream.Length是零?您是否使用调试器对其进行了测试,或者假设它基于在 ftp 服务器上获取零大小的文件?如果是后者,我建议您记录异常,因为可能会出错,以及当它出错时如何简单地返回 false。 -
我检查了一些其他文件,它似乎只适用于图像,并且对于任何其他文件返回 0
-
所以在一个完全干净的项目中,
File.OpenRead(path).Length在绝对大于零的.doc文件上为零?你确定吗?您确定tempFile大于 0 字节吗?你一开始写对tempFile了吗?您是否关闭并刷新了创建tempFile的FileStream? -
是的,文件肯定大于零。是的,我在保存 tempFile 后关闭并刷新
标签: c# asp.net filestream