无论我读取 TXT 文件还是 XML 文件,我总是会看到“额外”信息添加到保存到磁盘的文件中。我们首先执行以下操作:
FileStream fs = new FileStream(fileMoverFile.SourcePath, FileMode.Open, FileAccess.Read);
然后我们分配fs
到一个类型的变量Stream
我们将其传递给下面的函数:
private void SaveToDisk(Stream fileStream, string saveToPath)
{
if (!Directory.Exists(Path.GetDirectoryName(saveToPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(saveToPath));
}
FileStream outputStream = new FileInfo(saveToPath).OpenWrite();
const int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int bytesRead = fileStream.Read(buffer, 0, bufferSize);
while (bytesRead > 0)
{
outputStream.Write(buffer, 0, bufferSize);
bytesRead = fileStream.Read(buffer, 0, bufferSize);
}
outputStream.Close();
}
当我打开保存到磁盘的文件时,我看到额外的信息,这些信息基本上是同一文件的某些内容与不属于该文件的其他信息重复。
很奇怪。
可能是什么原因造成的?
你需要写bytesRead
字节,不是bufferSize
bytes:
int bytesRead = fileStream.Read(buffer, 0, bufferSize);
while (bytesRead > 0)
{
outputStream.Write(buffer, 0, bytesRead); // Change this here
现在,当您到达输入流的末尾时,您写入的数据可能比读入的数据多,这将导致文件末尾出现“额外的垃圾”。
话虽如此,如果您的目标只是复制流,您可以使用流.复制到 http://msdn.microsoft.com/en-us/library/dd782932.aspx(前提是您使用的是 .NET 4+)。这完全避免了读/写循环,并极大地简化了您的代码:
private void SaveToDisk(Stream fileStream, string saveToPath)
{
if (!Directory.Exists(Path.GetDirectoryName(saveToPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(saveToPath));
}
using(FileStream outputStream = new FileInfo(saveToPath).OpenWrite())
{
fileStream.CopyTo(outputStream);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)