|
@@ -239,8 +239,9 @@ namespace XdCxRhDW.TaskServer.Task
|
|
|
/// <param name="dtRange"></param>
|
|
|
/// <param name="Ch"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> ExtractMergeAsync(string file, double fsHz, List<SmpPosition> smps, double dtCenter, double dtRange, int Ch)
|
|
|
+ public async Task<ExtractRes> ExtractMergeAsync(string file, double fsHz, List<SmpPosition> smps, double dtCenter, double dtRange, int Ch)
|
|
|
{
|
|
|
+ long offset = 0;
|
|
|
long zero = 0;
|
|
|
if (Ch == 2)//主星
|
|
|
{
|
|
@@ -252,7 +253,8 @@ namespace XdCxRhDW.TaskServer.Task
|
|
|
}
|
|
|
else//地信号文件
|
|
|
{
|
|
|
- zero = Convert.ToInt64(0.26 * fsHz) / 2;
|
|
|
+ zero = Convert.ToInt64(dtRange * 1e-6 * fsHz) / 2;
|
|
|
+ offset = Convert.ToInt64(0.26 * fsHz);
|
|
|
}
|
|
|
|
|
|
string detectFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MultiDetect");
|
|
@@ -261,6 +263,10 @@ namespace XdCxRhDW.TaskServer.Task
|
|
|
string outfile = Path.Combine(detectFolder, Path.GetFileNameWithoutExtension(file) + "_de" + Path.GetExtension(file));
|
|
|
|
|
|
|
|
|
+ ExtractRes res = new ExtractRes();
|
|
|
+ res.file = outfile;
|
|
|
+
|
|
|
+ List<SmpPosition> smpp = new List<SmpPosition>();
|
|
|
// 从指定位置开始读取数据
|
|
|
using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
|
|
|
{
|
|
@@ -268,24 +274,33 @@ namespace XdCxRhDW.TaskServer.Task
|
|
|
|
|
|
foreach (var smp in smps)
|
|
|
{
|
|
|
- long offset = smp.smpStart * 4 - zero * 4;
|
|
|
+
|
|
|
+ long start = (smp.smpStart - zero - offset) * 4;
|
|
|
+ int length = Convert.ToInt32(smp.smpCount + zero * 2 - offset) * 4;
|
|
|
|
|
|
- fileStream.Seek(offset, SeekOrigin.Begin); // 移动到文件的指定位置
|
|
|
+ if (start < 0 || length < 0 || length > fileStream.Length)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 移动到文件的指定位置
|
|
|
+ fileStream.Seek(start, SeekOrigin.Begin);
|
|
|
|
|
|
- int length = Convert.ToInt32((long)smp.smpCount * 4 + zero * 4);
|
|
|
- byte[] buffer = new byte[length];
|
|
|
- int bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length); // 读取指定长度的数据
|
|
|
+ byte[] buffer = new byte[length];
|
|
|
+ // 读取指定长度的数据
|
|
|
+ int bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length);
|
|
|
|
|
|
- Array.ConstrainedCopy(buffer, 0, bytes, (int)offset, bytesRead);
|
|
|
-
|
|
|
+ Array.ConstrainedCopy(buffer, 0, bytes, (int)start, bytesRead);
|
|
|
+ smpp.Add(smp);
|
|
|
+
|
|
|
}
|
|
|
using (FileStream wrStream = new FileStream(outfile, FileMode.Create, FileAccess.ReadWrite))
|
|
|
{
|
|
|
await wrStream.WriteAsync(bytes, 0, bytes.Length);
|
|
|
}
|
|
|
- return outfile;
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
+ res.positions = smpp;
|
|
|
+ return res;
|
|
|
|
|
|
}
|
|
|
}
|