Files
easySif/mainProgram/ProjectManager.cs

943 lines
32 KiB
C#
Raw Normal View History

2021-12-14 18:39:55 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.IO;
2021-12-20 18:34:41 +08:00
using System.Windows.Forms;
2021-12-14 18:39:55 +08:00
namespace mainProgram
{
public delegate void UpdateProgressBarInfoDelegate(int ipos, string vinfo);//申明代理用于进度条的更新UpdateProgressBarInfoDelegate 1
public class DateFolder : IComparable//接口
{
private int mYear;
private int mMonth;
private int mDay;
//int hout;
//int minute;
//int second;
public string mDateFolder;
public DateFolder(string dateFolder)
{
string[] tmp = dateFolder.Split('_');
mYear = int.Parse(tmp[0]);
mMonth = int.Parse(tmp[1]);
mDay = int.Parse(tmp[2]);
mDateFolder = dateFolder;
}
public string GetDateFolder()
{
return mDateFolder;
}
//重载运算符
public static bool operator >(DateFolder a, DateFolder b)
{
if (a.mYear > b.mYear)
{
return true;
}
else if (a.mYear < b.mYear)
{
return false;
}
else if (a.mYear == b.mYear)
{
if (a.mMonth > b.mMonth)
{
return true;
}
else if (a.mMonth < b.mMonth)
{
return false;
}
else if (a.mMonth == b.mMonth)
{
if (a.mDay > b.mDay)
{
return true;
}
else if (a.mDay < b.mDay)
{
return false;
}
else if (a.mDay == b.mDay)
{
}
}
}
return false;
}
public static bool operator <(DateFolder a, DateFolder b)
{
if (a.mYear < b.mYear)
{
return true;
}
else if (a.mYear > b.mYear)
{
return false;
}
else if (a.mYear == b.mYear)
{
if (a.mMonth < b.mMonth)
{
return true;
}
else if (a.mMonth > b.mMonth)
{
return false;
}
else if (a.mMonth == b.mMonth)
{
if (a.mDay < b.mDay)
{
return true;
}
else if (a.mDay > b.mDay)
{
return false;
}
else if (a.mDay == b.mDay)
{
}
}
}
return false;
}
//负数值:当前对象小于参数对象;
//正数值:当前对象大于参数对象;
//零:两个对象在比较时相等;
public int CompareTo(object obj)//IComparable接口
{
DateFolder df = (DateFolder)obj;
if (this.mYear < df.mYear)
{
return -1;
}
else if (this.mYear > df.mYear)
{
return 1;
}
else if (this.mYear == df.mYear)
{
if (this.mMonth < df.mMonth)
{
return -1;
}
else if (this.mMonth > df.mMonth)
{
return 1;
}
else if (this.mMonth == df.mMonth)
{
if (this.mDay < df.mDay)
{
return -1;
}
else if (this.mDay > df.mDay)
{
return 1;
}
else if (this.mDay == df.mDay)
{
}
}
}
return 0;
}
}
2021-12-14 18:39:55 +08:00
public class ProjectManager
{
public ProjectManager(string xx)
{
mProjectPath = xx;
}
private string mProjectPath;
2021-12-16 18:40:51 +08:00
private string mMetadataPath;
2021-12-14 18:39:55 +08:00
private string mRawPath;
private string mRadPath;
public string mSifPath;
public string mSifTmpPath;
private int mCsvFileCount;
2021-12-16 18:40:51 +08:00
2021-12-14 18:39:55 +08:00
public string ProjectPath
{
get
{
return mProjectPath;
}
set
{
mProjectPath = value;
}
}
public void CreateProject(string calFilePath, string dataPath)
2021-12-14 18:39:55 +08:00
{
2021-12-16 18:40:51 +08:00
if (mProjectPath.Length == 0)
{
return;
}
DelectDir(mProjectPath);//删除工程路径下的所有内容
CreateProjectStructure();
CopyCalFiles2Project(calFilePath);//复制定标文件到工程结构对应文件夹
CopyFiles2Project(dataPath);//复制原始数据文件到工程结构对应文件夹
2021-12-16 18:40:51 +08:00
////创建工程元数据
//string myXMLFilePath = mMetadataPath + "/metadata.xml";
////生成xml文件
//GenerateXMLFile(myXMLFilePath);
////遍历xml文件的信息
//GetXMLInformation(myXMLFilePath);
////修改xml文件的信息
//ModifyXmlInformation(myXMLFilePath);
////向xml文件添加节点信息
//AddXmlInformation(myXMLFilePath);
////删除指定节点信息
//DeleteXmlInformation(myXMLFilePath);
2021-12-14 18:39:55 +08:00
}
public void OpenProject()
2021-12-14 18:39:55 +08:00
{
2021-12-20 18:34:41 +08:00
mMetadataPath = Path.Combine(mProjectPath, ".project");
mRawPath = Path.Combine(mProjectPath, "1raw");
mRadPath = Path.Combine(mProjectPath, "2rad");
mSifPath = Path.Combine(mProjectPath, "3sif");
BinaryReader br = new BinaryReader(new FileStream(Path.Combine(mMetadataPath, "CsvFileCount.dat"), FileMode.Open));
mCsvFileCount = br.ReadInt32();
br.Close();
2021-12-20 18:34:41 +08:00
//if (false == Directory.Exists(mMetadataPath))
//{
// Directory.CreateDirectory(mMetadataPath);
// MessageBox.Show("工程打开成功!", "提示");
//}
//if (false == Directory.Exists(mRawPath))
//{
// Directory.CreateDirectory(mRawPath);
//}
//if (false == Directory.Exists(mRadPath))
//{
// Directory.CreateDirectory(mRadPath);
//}
//if (false == Directory.Exists(mSifPath))
//{
// Directory.CreateDirectory(mSifPath);
//}
2021-12-14 18:39:55 +08:00
}
public void SaveProject()
{
}
public void AddData()
{
}
public void DeleteData()
{
}
//生成工程元数据
public void GenerateXMLFile(string xmlFilePath)
{
try
{
//初始化一个xml实例
XmlDocument myXmlDoc = new XmlDocument();
//创建xml的根节点
XmlElement rootElement = myXmlDoc.CreateElement("Computers");
//将根节点加入到xml文件中AppendChild
myXmlDoc.AppendChild(rootElement);
//初始化第一层的第一个子节点
XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");
//填充第一层的第一个子节点的属性值SetAttribute
firstLevelElement1.SetAttribute("ID", "11111111");
firstLevelElement1.SetAttribute("Description", "Made in China");
//将第一层的第一个子节点加入到根节点下
rootElement.AppendChild(firstLevelElement1);
//初始化第二层的第一个子节点
XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");
//填充第二层的第一个子节点的值InnerText
secondLevelElement11.InnerText = "Lenovo";
firstLevelElement1.AppendChild(secondLevelElement11);
XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");
secondLevelElement12.InnerText = "5000";
firstLevelElement1.AppendChild(secondLevelElement12);
XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");
firstLevelElement2.SetAttribute("ID", "2222222");
firstLevelElement2.SetAttribute("Description", "Made in USA");
rootElement.AppendChild(firstLevelElement2);
XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");
secondLevelElement21.InnerText = "IBM";
firstLevelElement2.AppendChild(secondLevelElement21);
XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");
secondLevelElement22.InnerText = "10000";
firstLevelElement2.AppendChild(secondLevelElement22);
//将xml文件保存到指定的路径下
myXmlDoc.Save(xmlFilePath);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public void GetXMLInformation(string xmlFilePath)
{
try
{
XmlDocument myXmlDoc = new XmlDocument();//初始化一个xml实例
myXmlDoc.Load(xmlFilePath);//加载xml文件参数为xml文件的路径
XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");//获得第一个姓名匹配的节点SelectSingleNode此xml文件的根节点
string innerXmlInfo = rootNode.InnerXml.ToString();//分别获得该节点的InnerXml和OuterXml信息
string outerXmlInfo = rootNode.OuterXml.ToString();
XmlNodeList firstLevelNodeList = rootNode.ChildNodes;//获得该节点的子节点(即:该节点的第一层子节点)
foreach (XmlNode node in firstLevelNodeList)
{
XmlAttributeCollection attributeCol = node.Attributes;//获得该节点的属性集合
foreach (XmlAttribute attri in attributeCol)
{
//获取属性名称与属性值
string name = attri.Name;
string value = attri.Value;
Console.WriteLine("{0} = {1}", name, value);
}
//判断此节点是否还有子节点
if (node.HasChildNodes)
{
XmlNode secondLevelNode1 = node.FirstChild;//获取该节点的第一个子节点
string name = secondLevelNode1.Name;//获取该节点的名字
string innerText = secondLevelNode1.InnerText;//获取该节点的值InnerText
Console.WriteLine("{0} = {1}", name, innerText);
XmlNode secondLevelNode2 = node.ChildNodes[1];//获取该节点的第二个子节点(用数组下标获取)
name = secondLevelNode2.Name;
innerText = secondLevelNode2.InnerText;
Console.WriteLine("{0} = {1}", name, innerText);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public void ModifyXmlInformation(string xmlFilePath)
{
try
{
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(xmlFilePath);
XmlNode rootNode = myXmlDoc.FirstChild;
XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
foreach (XmlNode node in firstLevelNodeList)
{
//修改此节点的属性值
if (node.Attributes["Description"].Value.Equals("Made in USA"))
{
node.Attributes["Description"].Value = "Made in HongKong";
}
}
//要想使对xml文件所做的修改生效必须执行以下Save方法
myXmlDoc.Save(xmlFilePath);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public void AddXmlInformation(string xmlFilePath)
{
try
{
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(xmlFilePath);
//添加一个带有属性的节点信息
foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
{
XmlElement newElement = myXmlDoc.CreateElement("color");
newElement.InnerText = "black";
newElement.SetAttribute("IsMixed", "Yes");
node.AppendChild(newElement);
}
//保存更改
myXmlDoc.Save(xmlFilePath);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public void DeleteXmlInformation(string xmlFilePath)
{
try
{
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(xmlFilePath);
foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
{
//记录该节点下的最后一个子节点(简称:最后子节点)
XmlNode lastNode = node.LastChild;
//删除最后子节点下的左右子节点
lastNode.RemoveAll();
//删除最后子节点
node.RemoveChild(lastNode);
}
//保存对xml文件所做的修改
myXmlDoc.Save(xmlFilePath);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
//文件复制实现https://www.cnblogs.com/sun-shadow/p/7553556.html
public void CopyFiles2Project(string sourceFolderName)//
2021-12-14 18:39:55 +08:00
{
if (Directory.Exists(mRawPath))
{
DelectDir(mRawPath);
}
mCsvFileCount = 0;
CopySubFun(sourceFolderName, mRawPath, true);//因为此函数会递归,所以把它摘出来
}
public void CopyCalFiles2Project(string sourceFolderName)
{
if (!Directory.Exists(sourceFolderName))
{
return;
}
if (!Directory.Exists(mMetadataPath))
{
Directory.CreateDirectory(mMetadataPath);
}
string[] sourceFilesPath = Directory.GetFileSystemEntries(sourceFolderName);
for (int i = 0; i < sourceFilesPath.Length; i++)
{
string sourceFilePath = sourceFilesPath[i];
string[] forlders = sourceFilePath.Split('\\');
if (File.Exists(sourceFilePath))//是文件,直接拷贝
{
string dest = mMetadataPath;
string sourceFileName = Path.GetFileName(sourceFilePath);//获取文件名
File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), true);
}
else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归
{
string lastDirectory = forlders[forlders.Length - 1];
string dest = Path.Combine(mMetadataPath, lastDirectory);
if (!Directory.Exists(dest))
{
Directory.CreateDirectory(dest);
}
CopySubFun(sourceFilePath, dest, true);
}
}
2021-12-14 18:39:55 +08:00
}
private void CopySubFun(string sourceFolderName, string destFolderName, bool overwrite)//因为此函数会递归,所以把它摘出来
2021-12-14 18:39:55 +08:00
{
if (!Directory.Exists(sourceFolderName))
{
return;
}
if (!Directory.Exists(destFolderName))
{
Directory.CreateDirectory(destFolderName);
}
string[] sourceFilesPath = Directory.GetFileSystemEntries(sourceFolderName);
for (int i = 0; i < sourceFilesPath.Length; i++)
{
2021-12-16 18:40:51 +08:00
string sourceFilePath = sourceFilesPath[i];
string[] forlders = sourceFilePath.Split('\\');
2021-12-14 18:39:55 +08:00
if (File.Exists(sourceFilePath))//是文件,直接拷贝
{
string dest = destFolderName;
2021-12-16 18:40:51 +08:00
string sourceFileName = Path.GetFileName(sourceFilePath);//获取文件名
2021-12-14 18:39:55 +08:00
File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite);
//统计文件个数
mCsvFileCount++;
2021-12-14 18:39:55 +08:00
}
else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归
{
string lastDirectory = forlders[forlders.Length - 1];
2021-12-16 18:40:51 +08:00
string dest = Path.Combine(destFolderName, lastDirectory);
2021-12-14 18:39:55 +08:00
if (!Directory.Exists(dest))
{
Directory.CreateDirectory(dest);
}
CopySubFun(sourceFilePath, dest, overwrite);
}
}
//将文件个数写入到可执行文件所在目录 → 打开工程时需要读取
BinaryWriter bw = new BinaryWriter(new FileStream(Path.Combine(mMetadataPath, "CsvFileCount.dat"), FileMode.Create));
bw.Write(mCsvFileCount);
bw.Close();
2021-12-14 18:39:55 +08:00
}
private void DelectDir(string srcPath)
{
DirectoryInfo dir = new DirectoryInfo(srcPath);
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
foreach (FileSystemInfo i in fileinfo)
{
if (i is DirectoryInfo) //判断是否文件夹
{
DirectoryInfo subdir = new DirectoryInfo(i.FullName);
subdir.Delete(true); //删除子目录和文件
}
else
{
File.Delete(i.FullName); //删除指定文件
}
}
}
//工程结构
public void CreateProjectStructure()
{
//创建工程文件夹结构
2021-12-16 18:40:51 +08:00
//mMetadataPath = mProjectPath + "\\.project\\";
//mRawPath = mProjectPath + "\\1raw\\";
//mRadPath = mProjectPath + "\\2rad\\";
//mSifPath = mProjectPath + "\\3sif\\";
mMetadataPath = Path.Combine(mProjectPath, ".project");
mRawPath = Path.Combine(mProjectPath, "1raw");
mRadPath = Path.Combine(mProjectPath, "2rad");
mSifPath = Path.Combine(mProjectPath, "3sif");
if (false == Directory.Exists(mMetadataPath))
{
Directory.CreateDirectory(mMetadataPath);
}
2021-12-14 18:39:55 +08:00
if (false == Directory.Exists(mRawPath))
{
Directory.CreateDirectory(mRawPath);
}
if (false == Directory.Exists(mRadPath))
{
Directory.CreateDirectory(mRadPath);
}
if (false == Directory.Exists(mSifPath))
{
Directory.CreateDirectory(mSifPath);
}
}
2021-12-16 18:40:51 +08:00
2021-12-22 18:07:40 +08:00
public int getTxtFileCount()
{
string[] metaFilesPath = Directory.GetFileSystemEntries(mMetadataPath);
int txtFileCount = 0;
for (int i = 0; i < metaFilesPath.Length; i++)//
{
if (metaFilesPath[i].Contains("txt"))
{
txtFileCount++;
}
}
return txtFileCount;
}
public int getCalFileCount()
2021-12-22 18:07:40 +08:00
{
string[] metaFilesPath = Directory.GetFileSystemEntries(mMetadataPath);
int datFileCount = 0;
for (int i = 0; i < metaFilesPath.Length; i++)//
{
if (metaFilesPath[i].Contains("cal"))
2021-12-22 18:07:40 +08:00
{
datFileCount++;
}
}
return datFileCount;
}
2021-12-16 18:40:51 +08:00
public UpdateProgressBarInfoDelegate UpdateProgressBarInfo;//
2021-12-16 18:40:51 +08:00
//处理工程中的数据
public void Rad()
{
int counter = 0;
2021-12-22 18:07:40 +08:00
//读取标定文件:辐射定标文件 + 非线性校正文件
int datFileCount = getCalFileCount();
2021-12-22 18:07:40 +08:00
int txtFileCount = getTxtFileCount();
2021-12-16 18:40:51 +08:00
2021-12-22 18:07:40 +08:00
CalData[] calDatas = new CalData[datFileCount];
NonLinearData[] nonLinearDatas = new NonLinearData[txtFileCount];
int d1 = 0, d2 = 0;
string[] metaFilesPath = Directory.GetFileSystemEntries(mMetadataPath);
for (int i = 0; i < datFileCount + txtFileCount; i++)
{
if (metaFilesPath[i].Contains("txt"))
{
nonLinearDatas[d1] = ReadNonLinearFile(metaFilesPath[i]);
d1++;
}
else if (metaFilesPath[i].Contains("cal"))
2021-12-22 18:07:40 +08:00
{
calDatas[d2] = ReadCalFile(metaFilesPath[i]);
d2++;
}
}
2021-12-20 18:34:41 +08:00
2021-12-22 18:07:40 +08:00
//对文件夹中的文件遍历处理:非线性校正 + 辐射定标
Console.WriteLine("工程目录为" + mProjectPath);
DelectDir(mRadPath);
2021-12-20 18:34:41 +08:00
string[] sourceFilesPath = Directory.GetFileSystemEntries(mRawPath);
2021-12-22 18:07:40 +08:00
for (int i = 0; i < sourceFilesPath.Length; i++)//mRawPath下的日期文件夹
2021-12-20 18:34:41 +08:00
{
string sourceFilePath = sourceFilesPath[i];
string[] forlders = sourceFilePath.Split('\\');
string lastDirectory = forlders[forlders.Length - 1];
string dest = Path.Combine(mRadPath, lastDirectory);
if (!Directory.Exists(dest))
{
Directory.CreateDirectory(dest);
}
2021-12-22 18:07:40 +08:00
2021-12-20 18:34:41 +08:00
string[] rawFiles = Directory.GetFileSystemEntries(Path.Combine(mRawPath, lastDirectory));
2021-12-22 18:07:40 +08:00
foreach (string rawFileName in rawFiles)//日期文件夹下的文件
2021-12-20 18:34:41 +08:00
{
string[] nameTmp = rawFileName.Split('\\');
string name = nameTmp[nameTmp.Length - 1];
2021-12-22 18:07:40 +08:00
SpectralDataReaderWriter spectralDataReaderWriter = new SpectralDataReaderWriter(rawFileName);
for (int j = 1; j <= spectralDataReaderWriter.TotalSpectralCount; j++)//处理 csv文件中的每条光谱
2021-12-20 18:34:41 +08:00
{
2021-12-22 18:07:40 +08:00
SpectralData spectralData = spectralDataReaderWriter.GetSpectral(j);
2021-12-20 18:34:41 +08:00
2021-12-22 18:07:40 +08:00
int nonLinearData_index = GetnonLinearDataIndex(spectralData, nonLinearDatas);
int calData_index = GetCalDataIndex(spectralData, calDatas);
2021-12-20 18:34:41 +08:00
2021-12-22 18:07:40 +08:00
SpectralProcessor sp = new SpectralProcessor();
if (nonLinearData_index >= 0)//非线性校正
{
sp.NonLinearCorrection(nonLinearDatas[nonLinearData_index].nonLinearData, spectralData.spectral, spectralData.spectralDataLength);
}
if (calData_index >= 0)//福亮度转换
2021-12-22 18:07:40 +08:00
{
sp.RadCorrection(calDatas[calData_index].gain, calDatas[calData_index].exposureTime, spectralData.spectral, spectralData.exposureTime, spectralData.spectralDataLength);
2021-12-22 18:07:40 +08:00
}
spectralDataReaderWriter.UpdateSpectral(j, spectralData);
2021-12-20 18:34:41 +08:00
}
string destFileName = Path.Combine(dest, name);
2021-12-22 18:07:40 +08:00
spectralDataReaderWriter.SaveCSV(destFileName);
counter++;
float tmp1 = (float)counter / (float)mCsvFileCount;
float tmp2 = tmp1 * 100;
UpdateProgressBarInfo((int)tmp2, name + "\r\n");
2021-12-22 18:07:40 +08:00
}
}
//福亮度转换完成后,需要做得动作
2021-12-22 18:07:40 +08:00
}
/*
-1
*/
public int GetnonLinearDataIndex(SpectralData spectralData, NonLinearData[] nonLinearData)
{
for (int i = 0; i < nonLinearData.GetLength(0); i++)
{
if (nonLinearData[i].SN.Contains(spectralData.SN))
{
return i;
}
}
return -1;
}
2021-12-20 18:34:41 +08:00
2021-12-22 18:07:40 +08:00
/*
-1
*/
public int GetCalDataIndex(SpectralData spectralData, CalData[] calData)
{
for (int i = 0; i < calData.GetLength(0); i++)
{
if (calData[i].SN.Contains(spectralData.SN) && calData[i].position==spectralData.position)
2021-12-22 18:07:40 +08:00
{
return i;
2021-12-20 18:34:41 +08:00
}
}
2021-12-22 18:07:40 +08:00
return -1;
}
public CalData ReadCalFile(string calFilePath)
{
CalData calFile;
string[] forlders = calFilePath.Split('\\');
string filename = forlders[forlders.Length - 1].Split('.')[0];
string[] xx = filename.Split('_');
calFile.SN = xx[0];
//string tmp = xx[1][xx[1].Length - 1];
int s = int.Parse(xx[1]);
calFile.position = s;
2021-12-22 18:07:40 +08:00
FileStream fs2 = new FileStream(calFilePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs2);
calFile.exposureTime = br.ReadUInt16();
calFile.temperature = br.ReadSingle();
2021-12-22 18:07:40 +08:00
calFile.pixelCount = br.ReadInt32();
calFile.waveLengthInNM = new float[calFile.pixelCount];
calFile.gain = new double[calFile.pixelCount];
calFile.offset = new double[calFile.pixelCount];
2021-12-22 18:07:40 +08:00
for (int ii = 0; ii < calFile.pixelCount; ii++)
{
calFile.waveLengthInNM[ii] = br.ReadSingle();
}
for (int ii = 0; ii < calFile.pixelCount; ii++)
{
calFile.gain[ii] = br.ReadDouble();
}
for (int ii = 0; ii < calFile.pixelCount; ii++)
{
calFile.offset[ii] = br.ReadDouble();
}
2021-12-22 18:07:40 +08:00
return calFile;
}
public NonLinearData ReadNonLinearFile(string nonLinearFilePath)
{
NonLinearData nonLinearData;
string[] forlders = nonLinearFilePath.Split('\\');
nonLinearData.SN = forlders[forlders.Length - 1].Split('.')[0];
2021-12-22 18:07:40 +08:00
int lineCount = FindMaxRowCount(nonLinearFilePath);
nonLinearData.nonLinearData = new double[lineCount];
FileStream fs = new FileStream(nonLinearFilePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string strLine = "";//记录每次读取的一行记录
int i = 0;
while ((strLine = sr.ReadLine()) != null)//逐行读取CSV中的数据
{
nonLinearData.nonLinearData[i] = double.Parse(strLine);
i++;
}
return nonLinearData;
}
public int FindMaxRowCount(string filePath)
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string strLine = "";
int maxColunmCount = 0;
while ((strLine = sr.ReadLine()) != null)
{
maxColunmCount++;
}
sr.Close();
fs.Close();
return maxColunmCount;
2021-12-16 18:40:51 +08:00
}
DateFolder[] df;
public void FindTimespan()//因为此函数会递归,所以把它摘出来
{
if (!Directory.Exists(mRadPath))
{
return;
}
string[] dateFolders = Directory.GetFileSystemEntries(mRadPath);
df = new DateFolder[dateFolders.Length];
for (int i = 0; i < dateFolders.Length; i++)
{
string dateFolder = dateFolders[i];
if (Directory.Exists(dateFolder))//是文件夹
{
string[] splitPath = dateFolder.Split('\\');//
string lastDirectory = splitPath[splitPath.Length - 1];
df[i] = new DateFolder(lastDirectory);
}
}
Array.Sort(df);
}
public string GetMinDate()
{
return df[0].mDateFolder;
}
public string GetMaxDate()
{
return df[df.Length - 1].mDateFolder;
}
public void CopyWantedFiles(string minTime, string maxTime)
{
mSifTmpPath = Path.Combine(mProjectPath, "sifTmp");//mSifTmpPath
if (false == Directory.Exists(mSifTmpPath))
{
Directory.CreateDirectory(mSifTmpPath);
}
DelectDir(mSifTmpPath);//删除文件夹中的内容
//遍历,复制文件夹[minTimemaxTime]中的文件到mSifTmpPath
DateFolder minDateFolder = new DateFolder(minTime);
DateFolder maxDateFolder = new DateFolder(maxTime);
foreach (DateFolder currentFolder in df)
{
if (minDateFolder > currentFolder | currentFolder > maxDateFolder)
{
continue;
}
//复制文件
string sourcePath = Path.Combine(mRadPath, currentFolder.mDateFolder);
CopyWithModifyName(sourcePath, mSifTmpPath, true);
}
}
private void CopyWithModifyName(string sourceFolderPath, string destFolderPath, bool overwrite)//
{
if (!Directory.Exists(sourceFolderPath))
{
return;
}
if (!Directory.Exists(destFolderPath))
{
Directory.CreateDirectory(destFolderPath);
}
string[] sourceFilesPath = Directory.GetFileSystemEntries(sourceFolderPath);
for (int i = 0; i < sourceFilesPath.Length; i++)
{
string sourceFilePath = sourceFilesPath[i];
//构建文件名
string destFileName="";
string[] forlders = sourceFilePath.Split('\\');
string sourceFolderName = forlders[forlders.Length - 2];//获取文件所在目录的目录名
string sourceFileName = forlders[forlders.Length - 1];//获取文件名sourceFileName
//string sourceFileName = Path.GetFileName(sourceFilePath);
int firstIndex = sourceFileName.IndexOf("_");
int lastIndex = sourceFileName.LastIndexOf("_");
if (firstIndex != -1)
{
destFileName = sourceFileName.Substring(firstIndex);
}
if (File.Exists(sourceFilePath))//是文件,直接拷贝
{
File.Copy(sourceFilePath, Path.Combine(destFolderPath, sourceFolderName + destFileName), overwrite);
}
else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归 → 减而治之
{
string lastDirectory = forlders[forlders.Length - 1];
string dest = Path.Combine(destFolderPath, lastDirectory);
if (!Directory.Exists(dest))
{
Directory.CreateDirectory(dest);
}
CopySubFun(sourceFilePath, dest, overwrite);
}
}
}
2021-12-14 18:39:55 +08:00
}
}