昨天我的老师给了我一个任务,就是在.txt文件中创建类似数据库的东西,它必须包含hexes和一个C#应用程序,它接受来自这个数据库的所有hexes,以及它的offSets。然后我必须使用它,偏移量,从该偏移量的文件中取十六进制并比较两个haxes,它们是否相同。
我正在使用fileSystemWatcher
来“监视”所选目录的新文件,并且使用一个,两个,三个或更多的文件,它可以完美地工作但是如果我尝试复制非常“大”的文件夹,应用程序就会停止 - “没有响应”。
我试着找出问题出现的地方,比如添加和删除函数,找到“黑羊” - 必须采用符合给定偏移量的文件十六进制的函数。
public string filesHex(string path,int bytesToRead,string offsetLong)
{
byte[] byVal;
try
{
using (Stream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
BinaryReader brFile = new BinaryReader(fileStream);
offsetLong = offsetLong.Replace("x", string.Empty);
long result = 0;
long.TryParse(offsetLong, System.Globalization.NumberStyles.HexNumber, null, out result);
fileStream.Position = result;
byte[] offsetByte = brFile.ReadBytes(0);
string offsetString = HexStr(offsetByte);
//long offset = System.Convert.ToInt64(offsetString, 16);
byVal = brFile.ReadBytes(bytesToRead);
}
string hex = HexStr(byVal).Substring(2);
return hex;
}
答案 0 :(得分:-1)
您可以创建一个新线程并在其中运行filesHex
方法。
您可以在线程代码中更改字符串,并在此之后获取它的值:
public string hex="";
public void filesHex(string path,int bytesToRead,string offsetLong)
{
byte[] byVal;
using (Stream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
BinaryReader brFile = new BinaryReader(fileStream);
offsetLong = offsetLong.Replace("x", string.Empty);
long result = 0;
long.TryParse(offsetLong, System.Globalization.NumberStyles.HexNumber, null, out result);
fileStream.Position = result;
byte[] offsetByte = brFile.ReadBytes(0);
string offsetString = HexStr(offsetByte);
//long offset = System.Convert.ToInt64(offsetString, 16);
byVal = brFile.ReadBytes(bytesToRead);
}
hex = HexStr(byVal).Substring(2);
}
这是你的电话:
Thread thread = new Thread(() => filesHex("a",5,"A"));//example for parameters.
thread.Start();
string hexfinal=hex;//here you can acess the desired string.
现在它不会冻结主UI线程,因为你在sperate线程上运行你的方法。
古德勒克。