String path = @"D://TDDOWNLOAD//Ju-on.2000.2in1.DVDRip-AVC.mkv"; //Open the stream and read it back.
FileStream fs = File.OpenRead(path);
FileStream fo = File.OpenWrite(@"E://Ju-on.2000.2in1.DVDRip-AVC.mkv");
byte[] b = new byte[1024 * 1024];
while (fs.Read(b,0,b.Length) >= 0)
{
fo.Write(b,0,b.Length);
fo.Flush();
}
fo.Close();
fs.Close();这是按照帮助文档上写的读写文件,刻个文件一共2G,可是一直结束不了,会多出几个G出来。byte写1024的话就没有问题,些1024 * 1024 就有问题了。
FileStream fs = File.OpenRead(path);
FileStream fo = File.OpenWrite(@"E://Ju-on.2000.2in1.DVDRip-AVC.mkv");
byte[] b = new byte[1024 * 1024];
while (fs.Read(b,0,b.Length) >= 0)
{
fo.Write(b,0,b.Length);
fo.Flush();
}
fo.Close();
fs.Close();这是按照帮助文档上写的读写文件,刻个文件一共2G,可是一直结束不了,会多出几个G出来。byte写1024的话就没有问题,些1024 * 1024 就有问题了。
解决方案 »
- winform做一个显示文本信息的界面
- 未将对象引用设置到对象的实例。
- c#.net 做遥控器的软件,需要了解哪方面的知识?
- JAVA 中 mouseDown(mouseevent e) 事件里面有个 e.getX() e.getY() 相当于C#里面的什么函数??
- 关于文件下载
- 怎样控制c#安装包中“安装文件夹”界面的安装目录总能包含产品名作为目录?我怎么设置才能让公司名、产品名总在安装目录的最下面两层?
- 点击添加附件问题
- c#网页和数据库交互的优化问题
- 报错“索引-1处没有值”!
- 如何使用visual studio.net打开web服务器上project?
- 关于BindingSource的问题
- opener.location.href會使父頁面值丟失
byte[] 最大能多大啊?在线等。
1 fs.Read 如果遇到文件结束,会返回 0 ,但你并不退出循环,这就是问题
2 fo.Write 的长度你写错了,应该用 fs.Read 返回的长度,这样会导致文件比原来的长,多出来的部分内容是最后第二次读取的,导致文件长度变成数组长度的整数倍。
嗯,byte 里面写1024 就没有问题,写大了就会一直读。原来我是写的>0 ,也有问题,后来我修改成>=0 ,一样的效果。
我觉得第一个 问题是不存在的,while()不满足条件的时候自己就退出了。第二个问题存在,我还不知道怎么修改,我看MSDN中也是这么写的。我就照抄过来了。
我把等号去掉了,读写文件也没问题,文件比之前的大一点,但是网路发送会变大。 FileStream fs = File.OpenRead(@"D://TDDOWNLOAD//Ju-on.2000.2in1.DVDRip-AVC.mkv");
Byte[] sendByte = new Byte[1024 * 1024 * 10];
//Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
while (fs.Read(sendByte, 0, sendByte.Length) > 0)
{
clientSocket.Send(sendByte);
}
fs.Close();
byte[] 最大能多大啊?在线等。
肯定比你这个1024*1024这个大!
我是用在socket中的,用socket传输文件。
StreamReader 是字符型的,我测试也不是很快。
System.IO.FileStream fs = System.IO.File.OpenRead(@"G:\音乐\杰子 - 玫瑰花儿开.mp3");
fs.CopyTo(System.IO.File.OpenWrite(@"G:\音乐\杰子 - 玫瑰花儿开1.mp3"));
var fs = System.IO.File.OpenRead()
using(var ms = new MemoryStream(fs))
byte[] datas = ms.ToArray();不过大文件一般都是分块发送
{
fo.Write(b,0,b.Length);
fo.Flush();
}
问题出在这里!
String path = @"D://TDDOWNLOAD//Ju-on.2000.2in1.DVDRip-AVC.mkv";
//Open the stream and read it back.
FileStream fs = File.OpenRead(path);
FileStream fo = File.OpenWrite(@"E://Ju-on.2000.2in1.DVDRip-AVC.mkv");
byte[] b = new byte[1024 * 1024];
while (fs.Read(b,0,b.Length) >= 0) <-问题出在这知道没
{
fo.Write(b,0,b.Length);
fo.Flush();
}
fo.Close();
fs.Close(); //改成这样
String path = @"D://TDDOWNLOAD//Ju-on.2000.2in1.DVDRip-AVC.mkv";
//Open the stream and read it back.
FileStream fs = File.OpenRead(path);
FileStream fo = File.OpenWrite(@"E://Ju-on.2000.2in1.DVDRip-AVC.mkv");
byte[] b = new byte[1024 * 1024];
int reLen=0;
while ((reLen=fs.Read(b,0,b.Length))>= 0) //<--这里要这样
{
fo.Write(b,0,reLen); 《-这里要这样
fo.Flush();
}
fo.Close();
fs.Close();
红色字建议改为何4096或8192
while (fs.Read(b,0,b.Length) >4096或8192)
我不想一次传输完成,因为文件的大小是不固定的。这个>=我已经修改了,读写本地的文件没有问题,发送到网路就有问题了。
String path = @"D://TDDOWNLOAD//Ju-on.2000.2in1.DVDRip-AVC.mkv";
//Open the stream and read it back.
FileStream fs = File.OpenRead(path);
FileStream fo = File.OpenWrite(@"E://Ju-on.2000.2in1.DVDRip-AVC.mkv");
byte[] b = new byte[1024 * 1024];
while (fs.Read(b,0,b.Length) >= 0) <-问题出在这知道没
{
fo.Write(b,0,b.Length);
fo.Flush();
}
fo.Close();
fs.Close(); //改成这样
String path = @"D://TDDOWNLOAD//Ju-on.2000.2in1.DVDRip-AVC.mkv";
//Open the stream and read it back.
FileStream fs = File.OpenRead(path);
FileStream fo = File.OpenWrite(@"E://Ju-on.2000.2in1.DVDRip-AVC.mkv");
byte[] b = new byte[1024 * 1024];
int reLen=0;
while ((reLen=fs.Read(b,0,b.Length))>= 0) //<--这里要这样
{
fo.Write(b,0,reLen); 《-这里要这样
fo.Flush();
}
fo.Close();
fs.Close();好的,我试试。
这个应该不影响的,还是感谢的回答。
{
private long _partCount;
private long _length;
private int _partSize = 4096 * 4;//每个块容量
private string _md5;
private object _tag;
private byte[] _partBuffer;
private int readPartIndex;
private string _filePath;
private DateTime _LastReadTime;
private string _fileName; public DateTime LastReadTime { get { return _LastReadTime; } }
public bool IsTimeout
{
get
{
return (DateTime.Now - _LastReadTime).TotalMinutes > 5;
}
} public string Key { get; set; } /// <summary>
/// 块数量
/// </summary>
public long PartCount
{
get { return _partCount; }
} /// <summary>
/// 文件长度
/// </summary>
public long Length
{
get { return _length; }
} /// <summary>
/// 每块容量
/// </summary>
public int PartSize
{
get { return _partSize; }
}
/// <summary>
/// 文件路径
/// </summary>
public string FilePath
{
get { return _filePath; }
} /// <summary>
/// 文件名
/// </summary>
public string FileName
{
get { return _fileName; }
} /// <summary>
/// MD5码
/// </summary>
public string MD5
{
get { return _md5; }
}
public object Tag
{
get
{
return _tag;
}
set
{
_tag = value;
}
}
public FileReader(string filePath)
{ this._filePath = filePath;
this._fileName = Path.GetFileName(filePath);
this._partBuffer = new byte[_partSize];
InitReader();
} public FileReader(string filePath, int partSize)
{
this._filePath = filePath;
this._fileName = Path.GetFileName(filePath);
this._partSize = partSize;
this._partBuffer = new byte[_partSize];
InitReader();
}
private void InitReader()
{
_LastReadTime = DateTime.Now;
using (FileStream _fileStream = CreateReader())
{
_length = _fileStream.Length;
_partCount = _length / _partSize;
if (_length % _partSize != 0)
{
_partCount++;
}
_md5 = MD5Helper.CretaeMD5(_fileStream);
_fileStream.Close();
}
} private FileStream CreateReader()
{
FileStream fileStream = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.Read, _partSize * 10, false);
return fileStream;
} public byte[] Read(long index)
{
_LastReadTime = DateTime.Now; if (index >= _partCount || index < 0)
return null; int size = _partSize; if (_length - _partSize * index < _partSize)
{
size = (int)(_length - _partSize * index);
} using (FileStream _fileStream = CreateReader())
{
_fileStream.Position = index * _partSize;
int len = _fileStream.Read(this._partBuffer, 0, size);
byte[] buffer = new byte[len];
Buffer.BlockCopy(_partBuffer, 0, buffer, 0, len);
_fileStream.Close();
return buffer;
}
} }
{
private long _partCount;
private long _length;
private int _partSize = 4096 * 4;//每个块容量
private string _md5;
private object _tag;
private byte[] _partBuffer;
private int readPartIndex;
private string _filePath;
private DateTime _LastReadTime;
private string _fileName; public DateTime LastReadTime { get { return _LastReadTime; } }
public bool IsTimeout
{
get
{
return (DateTime.Now - _LastReadTime).TotalMinutes > 5;
}
} public string Key { get; set; } /// <summary>
/// 块数量
/// </summary>
public long PartCount
{
get { return _partCount; }
} /// <summary>
/// 文件长度
/// </summary>
public long Length
{
get { return _length; }
} /// <summary>
/// 每块容量
/// </summary>
public int PartSize
{
get { return _partSize; }
}
/// <summary>
/// 文件路径
/// </summary>
public string FilePath
{
get { return _filePath; }
} /// <summary>
/// 文件名
/// </summary>
public string FileName
{
get { return _fileName; }
} /// <summary>
/// MD5码
/// </summary>
public string MD5
{
get { return _md5; }
}
public object Tag
{
get
{
return _tag;
}
set
{
_tag = value;
}
}
public FileReader(string filePath)
{ this._filePath = filePath;
this._fileName = Path.GetFileName(filePath);
this._partBuffer = new byte[_partSize];
InitReader();
} public FileReader(string filePath, int partSize)
{
this._filePath = filePath;
this._fileName = Path.GetFileName(filePath);
this._partSize = partSize;
this._partBuffer = new byte[_partSize];
InitReader();
}
private void InitReader()
{
_LastReadTime = DateTime.Now;
using (FileStream _fileStream = CreateReader())
{
_length = _fileStream.Length;
_partCount = _length / _partSize;
if (_length % _partSize != 0)
{
_partCount++;
}
_md5 = MD5Helper.CretaeMD5(_fileStream);
_fileStream.Close();
}
} private FileStream CreateReader()
{
FileStream fileStream = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.Read, _partSize * 10, false);
return fileStream;
} public byte[] Read(long index)
{
_LastReadTime = DateTime.Now; if (index >= _partCount || index < 0)
return null; int size = _partSize; if (_length - _partSize * index < _partSize)
{
size = (int)(_length - _partSize * index);
} using (FileStream _fileStream = CreateReader())
{
_fileStream.Position = index * _partSize;
int len = _fileStream.Read(this._partBuffer, 0, size);
byte[] buffer = new byte[len];
Buffer.BlockCopy(_partBuffer, 0, buffer, 0, len);
_fileStream.Close();
return buffer;
}
} }
多谢!我去试试!感谢大家。先结贴了,如果我解决这个问题,我会把答案写在这里的。!
byte[] 最大能多大啊?在线等。byte 是0到255吧····