代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
namespace ExToDB.FileTransfer
{
public class FileComsumer
{
private string fileName;
private Stream streamOuput = null;
private int bufferSize = 1024;
private Thread fileThread = null;
private volatile bool isStop;
public event ReturnEndEvent OnReadEnd;
public FileComsumer(string fileName)
{
isStop = false;
this.fileName = fileName;
}
/// <summary>
/// 获取读到的Stream
/// </summary>
public Stream StreamOuput
{
get { return streamOuput; }
}
public void Start()
{
fileThread = new Thread(new ThreadStart(TheadReadFile));
fileThread.Start();
}
public void Stop()
{
isStop = true;
if (fileThread != null && fileThread.ThreadState == System.Threading.ThreadState.Running)
fileThread.Abort();
fileThread = null;
}
private byte[] buffer = null;
/// <summary>
/// 获取读到的数据
/// </summary>
public byte[] Buffer
{
get { return buffer; }
}
private void TheadReadFile()
{
streamOuput = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, true);
int numBytesToRead = (int)streamOuput.Length;
int numBytesRead = 0;
buffer = new byte[streamOuput.Length];
while (numBytesToRead > 0 && !isStop)
{
// Read may return anything from 0 to numBytesToRead.
int n = streamOuput.Read(buffer, numBytesRead, numBytesToRead);
// The end of the file is reached.
if (n == 0)
{
OnOnReadEnd();
break;
}
numBytesRead += n;
numBytesToRead -= n;
//读取文件完成,触发事件
if (numBytesToRead == 0)
OnOnReadEnd();
}
streamOuput.Close();
}
private void OnOnReadEnd()
{
if(this.OnReadEnd!=null)
OnReadEnd(this,new ReturnEndReadEventargs(true));
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
namespace ExToDB.FileTransfer
{
public class FileComsumer
{
private string fileName;
private Stream streamOuput = null;
private int bufferSize = 1024;
private Thread fileThread = null;
private volatile bool isStop;
public event ReturnEndEvent OnReadEnd;
public FileComsumer(string fileName)
{
isStop = false;
this.fileName = fileName;
}
/// <summary>
/// 获取读到的Stream
/// </summary>
public Stream StreamOuput
{
get { return streamOuput; }
}
public void Start()
{
fileThread = new Thread(new ThreadStart(TheadReadFile));
fileThread.Start();
}
public void Stop()
{
isStop = true;
if (fileThread != null && fileThread.ThreadState == System.Threading.ThreadState.Running)
fileThread.Abort();
fileThread = null;
}
private byte[] buffer = null;
/// <summary>
/// 获取读到的数据
/// </summary>
public byte[] Buffer
{
get { return buffer; }
}
private void TheadReadFile()
{
streamOuput = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, true);
int numBytesToRead = (int)streamOuput.Length;
int numBytesRead = 0;
buffer = new byte[streamOuput.Length];
while (numBytesToRead > 0 && !isStop)
{
// Read may return anything from 0 to numBytesToRead.
int n = streamOuput.Read(buffer, numBytesRead, numBytesToRead);
// The end of the file is reached.
if (n == 0)
{
OnOnReadEnd();
break;
}
numBytesRead += n;
numBytesToRead -= n;
//读取文件完成,触发事件
if (numBytesToRead == 0)
OnOnReadEnd();
}
streamOuput.Close();
}
private void OnOnReadEnd()
{
if(this.OnReadEnd!=null)
OnReadEnd(this,new ReturnEndReadEventargs(true));
}
}
}