结构化读取csv中的光谱数据
This commit is contained in:
@ -7,6 +7,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace mainProgram
|
namespace mainProgram
|
||||||
{
|
{
|
||||||
@ -45,6 +46,55 @@ namespace mainProgram
|
|||||||
|
|
||||||
private void RadToolStripMenuItem_Click(object sender, EventArgs e)
|
private void RadToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
SpectralDataReaderWriter xx = new SpectralDataReaderWriter(@"D:\Desktop\0easySifProject\1raw\2021_12_16\beijing_17_57_44.csv");
|
||||||
|
|
||||||
|
|
||||||
|
string name = xx.mDataTable.Rows[16][0].ToString();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//mProjectManager.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//string[] sourceFilesPath = Directory.GetFileSystemEntries(sourceFolderName);
|
||||||
|
|
||||||
|
//for (int i = 0; i < sourceFilesPath.Length; i++)
|
||||||
|
//{
|
||||||
|
// string sourceFilePath = (sourceFilesPath[i]).Replace("\\", "/");
|
||||||
|
// string[] forlders = sourceFilePath.Split('/');
|
||||||
|
|
||||||
|
// if (File.Exists(sourceFilePath))
|
||||||
|
// {
|
||||||
|
// string dest = destFolderName;
|
||||||
|
// string sourceFileName = Path.GetFileName(sourceFilePath);
|
||||||
|
// File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite);
|
||||||
|
// }
|
||||||
|
// else if (Directory.Exists(sourceFilePath))
|
||||||
|
// {
|
||||||
|
// string lastDirectory = forlders[forlders.Length - 1];
|
||||||
|
// string dest = Path.Combine(destFolderName, lastDirectory).Replace("\\", "/");
|
||||||
|
|
||||||
|
// if (!Directory.Exists(dest))
|
||||||
|
// {
|
||||||
|
// Directory.CreateDirectory(dest);
|
||||||
|
// }
|
||||||
|
// CopySubFun(sourceFilePath, dest, overwrite);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,6 @@ namespace mainProgram
|
|||||||
MessageBox.Show(this, "数据文件夹路径不能为空", "提示");
|
MessageBox.Show(this, "数据文件夹路径不能为空", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (projectPath != null && projectPath.Length == 0)
|
if (projectPath != null && projectPath.Length == 0)
|
||||||
{
|
{
|
||||||
MessageBox.Show(this, "工程路径不能为空", "提示");
|
MessageBox.Show(this, "工程路径不能为空", "提示");
|
||||||
@ -45,30 +44,11 @@ namespace mainProgram
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProjectManager projectManager = new ProjectManager(projectPath);
|
ProjectManager projectManager = new ProjectManager(projectPath);
|
||||||
|
projectManager.CreateProject(dataPath);
|
||||||
projectManager.CreateProjectStructure();
|
|
||||||
projectManager.CopyFileToFile(dataPath);//复制原始数据文件到工程结构对应文件夹
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//ProjectManager xx = new ProjectManager();
|
|
||||||
|
|
||||||
////xml文件存储路径
|
|
||||||
//string myXMLFilePath = "D:\\csharp_vs2017\\easySif\\MyComputers.xml";
|
|
||||||
////生成xml文件
|
|
||||||
//xx.GenerateXMLFile(myXMLFilePath);
|
|
||||||
////遍历xml文件的信息
|
|
||||||
//xx.GetXMLInformation(myXMLFilePath);
|
|
||||||
////修改xml文件的信息
|
|
||||||
//xx.ModifyXmlInformation(myXMLFilePath);
|
|
||||||
////向xml文件添加节点信息
|
|
||||||
//xx.AddXmlInformation(myXMLFilePath);
|
|
||||||
////删除指定节点信息
|
|
||||||
//xx.DeleteXmlInformation(myXMLFilePath);
|
|
||||||
|
|
||||||
|
|
||||||
TransferEvent(projectManager);//触发事件
|
TransferEvent(projectManager);//触发事件
|
||||||
|
|
||||||
|
MessageBox.Show(this, "工程创建成功!", "提示");
|
||||||
Close();//创建工程完成后,关闭窗口
|
Close();//创建工程完成后,关闭窗口
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,19 @@ namespace mainProgram
|
|||||||
|
|
||||||
private void SelectProjectPathBtn_Click(object sender, EventArgs e)
|
private void SelectProjectPathBtn_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
FolderBrowserDialog dialog = new FolderBrowserDialog();
|
||||||
|
dialog.Description = "请选择工程文件夹";
|
||||||
|
if (dialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(dialog.SelectedPath))
|
||||||
|
{
|
||||||
|
MessageBox.Show(this, "文件夹路径不能为空", "提示");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
string savePath = dialog.SelectedPath;
|
||||||
|
ProjectPathTextBox.Text = savePath;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OpenProjectPathBtn_Click(object sender, EventArgs e)
|
private void OpenProjectPathBtn_Click(object sender, EventArgs e)
|
||||||
|
@ -16,10 +16,11 @@ namespace mainProgram
|
|||||||
}
|
}
|
||||||
|
|
||||||
private string mProjectPath;
|
private string mProjectPath;
|
||||||
|
private string mMetadataPath;
|
||||||
private string mRawPath;
|
private string mRawPath;
|
||||||
private string mRadPath;
|
private string mRadPath;
|
||||||
private string mSifPath;
|
private string mSifPath;
|
||||||
|
|
||||||
public string ProjectPath
|
public string ProjectPath
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@ -32,12 +33,31 @@ namespace mainProgram
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateProject()
|
public void CreateProject(string dataPath)
|
||||||
{
|
{
|
||||||
//if (mProjectPath.Length==0)
|
if (mProjectPath.Length == 0)
|
||||||
//{
|
{
|
||||||
// return;
|
return;
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
DelectDir(mProjectPath);//删除工程路径下的所有内容
|
||||||
|
CreateProjectStructure();
|
||||||
|
CopyFileToFile(dataPath);//复制原始数据文件到工程结构对应文件夹
|
||||||
|
|
||||||
|
////创建工程元数据
|
||||||
|
//string myXMLFilePath = mMetadataPath + "/metadata.xml";
|
||||||
|
////生成xml文件
|
||||||
|
//GenerateXMLFile(myXMLFilePath);
|
||||||
|
////遍历xml文件的信息
|
||||||
|
//GetXMLInformation(myXMLFilePath);
|
||||||
|
////修改xml文件的信息
|
||||||
|
//ModifyXmlInformation(myXMLFilePath);
|
||||||
|
////向xml文件添加节点信息
|
||||||
|
//AddXmlInformation(myXMLFilePath);
|
||||||
|
////删除指定节点信息
|
||||||
|
//DeleteXmlInformation(myXMLFilePath);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenProject()
|
public void OpenProject()
|
||||||
@ -254,19 +274,19 @@ namespace mainProgram
|
|||||||
|
|
||||||
for (int i = 0; i < sourceFilesPath.Length; i++)
|
for (int i = 0; i < sourceFilesPath.Length; i++)
|
||||||
{
|
{
|
||||||
string sourceFilePath = (sourceFilesPath[i]).Replace("\\", "/");
|
string sourceFilePath = sourceFilesPath[i];
|
||||||
string[] forlders = sourceFilePath.Split('/');
|
string[] forlders = sourceFilePath.Split('\\');
|
||||||
|
|
||||||
if (File.Exists(sourceFilePath))//是文件,直接拷贝
|
if (File.Exists(sourceFilePath))//是文件,直接拷贝
|
||||||
{
|
{
|
||||||
string dest = destFolderName;
|
string dest = destFolderName;
|
||||||
string sourceFileName = Path.GetFileName(sourceFilePath);
|
string sourceFileName = Path.GetFileName(sourceFilePath);//获取文件名
|
||||||
File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite);
|
File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite);
|
||||||
}
|
}
|
||||||
else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归
|
else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归
|
||||||
{
|
{
|
||||||
string lastDirectory = forlders[forlders.Length - 1];
|
string lastDirectory = forlders[forlders.Length - 1];
|
||||||
string dest = Path.Combine(destFolderName, lastDirectory).Replace("\\", "/");
|
string dest = Path.Combine(destFolderName, lastDirectory);
|
||||||
|
|
||||||
if (!Directory.Exists(dest))
|
if (!Directory.Exists(dest))
|
||||||
{
|
{
|
||||||
@ -279,7 +299,6 @@ namespace mainProgram
|
|||||||
|
|
||||||
private void DelectDir(string srcPath)
|
private void DelectDir(string srcPath)
|
||||||
{
|
{
|
||||||
|
|
||||||
DirectoryInfo dir = new DirectoryInfo(srcPath);
|
DirectoryInfo dir = new DirectoryInfo(srcPath);
|
||||||
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
|
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
|
||||||
foreach (FileSystemInfo i in fileinfo)
|
foreach (FileSystemInfo i in fileinfo)
|
||||||
@ -302,9 +321,20 @@ namespace mainProgram
|
|||||||
public void CreateProjectStructure()
|
public void CreateProjectStructure()
|
||||||
{
|
{
|
||||||
//创建工程文件夹结构
|
//创建工程文件夹结构
|
||||||
mRawPath = mProjectPath + "/raw/";
|
//mMetadataPath = mProjectPath + "\\.project\\";
|
||||||
mRadPath = mProjectPath + "/rad/";
|
//mRawPath = mProjectPath + "\\1raw\\";
|
||||||
mSifPath = mProjectPath + "/sif/";
|
//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);
|
||||||
|
}
|
||||||
if (false == Directory.Exists(mRawPath))
|
if (false == Directory.Exists(mRawPath))
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(mRawPath);
|
Directory.CreateDirectory(mRawPath);
|
||||||
@ -318,5 +348,37 @@ namespace mainProgram
|
|||||||
Directory.CreateDirectory(mSifPath);
|
Directory.CreateDirectory(mSifPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//处理工程中的数据
|
||||||
|
public void Rad()
|
||||||
|
{
|
||||||
|
//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 = destFolderName;
|
||||||
|
// string sourceFileName = Path.GetFileName(sourceFilePath);//获取文件名
|
||||||
|
// File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite);
|
||||||
|
// }
|
||||||
|
// else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归
|
||||||
|
// {
|
||||||
|
// string lastDirectory = forlders[forlders.Length - 1];
|
||||||
|
// string dest = Path.Combine(destFolderName, lastDirectory);
|
||||||
|
|
||||||
|
// if (!Directory.Exists(dest))
|
||||||
|
// {
|
||||||
|
// Directory.CreateDirectory(dest);
|
||||||
|
// }
|
||||||
|
// CopySubFun(sourceFilePath, dest, overwrite);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,311 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Data;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace mainProgram
|
namespace mainProgram
|
||||||
{
|
{
|
||||||
class SpectralProcessor
|
class SpectralProcessor
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void OpenNolinerData()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenCalData()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NonLinearCorrection(double[] coefficient, double[] rawData,int bandnumber)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < bandnumber; i++)
|
||||||
|
{
|
||||||
|
rawData[i] = rawData[i] / (coefficient[0]
|
||||||
|
+ coefficient[1] * rawData[i]
|
||||||
|
+ coefficient[2] * Math.Pow(rawData[i], 2)
|
||||||
|
+ coefficient[3] * Math.Pow(rawData[i], 3)
|
||||||
|
+ coefficient[4] * Math.Pow(rawData[i], 4)
|
||||||
|
+ coefficient[5] * Math.Pow(rawData[i], 5)
|
||||||
|
+ coefficient[6] * Math.Pow(rawData[i], 6)
|
||||||
|
+ coefficient[7] * Math.Pow(rawData[i], 7)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void RadCorrection(double[] calData, int i1,double[] rawData, int i2, int bandnumber)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < bandnumber; i++)
|
||||||
|
{
|
||||||
|
rawData[i] = rawData[i] * calData[i] * (i1 * 1.0) / (i2 * 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class SpectralDataReaderWriter
|
||||||
|
{
|
||||||
|
public SpectralDataReaderWriter(string csvPath)
|
||||||
|
{
|
||||||
|
mCsvPath = csvPath;
|
||||||
|
|
||||||
|
OpenCSV();
|
||||||
|
GetMetaData();
|
||||||
|
}
|
||||||
|
private string mCsvPath;
|
||||||
|
|
||||||
|
public DataTable mDataTable = null;
|
||||||
|
|
||||||
|
private int mTotalSpectrometer;
|
||||||
|
private int mSpectralCount;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public int findMaxColunmCount(string filePath)
|
||||||
|
{
|
||||||
|
Encoding encoding = GetType(filePath); //Encoding.ASCII;//
|
||||||
|
DataTable dt = new DataTable();
|
||||||
|
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
||||||
|
StreamReader sr = new StreamReader(fs, encoding);
|
||||||
|
|
||||||
|
string strLine = "";
|
||||||
|
string[] aryLine = null;
|
||||||
|
int maxColunmCount = 0;
|
||||||
|
int tmp;
|
||||||
|
|
||||||
|
while ((strLine = sr.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
aryLine = strLine.Split(',');
|
||||||
|
|
||||||
|
tmp = aryLine.Length;
|
||||||
|
if (maxColunmCount < tmp)
|
||||||
|
{
|
||||||
|
maxColunmCount = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sr.Close();
|
||||||
|
fs.Close();
|
||||||
|
|
||||||
|
return maxColunmCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
//https://www.jb51.net/article/193012.htm
|
||||||
|
public void OpenCSV()//从csv读取数据返回table
|
||||||
|
{
|
||||||
|
mDataTable = new DataTable();
|
||||||
|
int columnCount1 = findMaxColunmCount(mCsvPath);
|
||||||
|
|
||||||
|
for (int i = 0; i < columnCount1; i++)
|
||||||
|
{
|
||||||
|
DataColumn dc1 = new DataColumn();
|
||||||
|
mDataTable.Columns.Add(dc1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Encoding encoding = GetType(mCsvPath); //Encoding.ASCII;//
|
||||||
|
FileStream fs = new FileStream(mCsvPath, FileMode.Open, FileAccess.Read);
|
||||||
|
StreamReader sr = new StreamReader(fs, encoding);
|
||||||
|
|
||||||
|
|
||||||
|
//记录每次读取的一行记录
|
||||||
|
string strLine = "";
|
||||||
|
//记录每行记录中的各字段内容
|
||||||
|
string[] aryLine = null;
|
||||||
|
|
||||||
|
//逐行读取CSV中的数据
|
||||||
|
while ((strLine = sr.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
aryLine = strLine.Split(',');
|
||||||
|
DataRow dr = mDataTable.NewRow();
|
||||||
|
for (int j = 0; j < aryLine.Length; j++)
|
||||||
|
{
|
||||||
|
dr[j] = aryLine[j];
|
||||||
|
}
|
||||||
|
mDataTable.Rows.Add(dr);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sr.Close();
|
||||||
|
fs.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GetMetaData()
|
||||||
|
{
|
||||||
|
mTotalSpectrometer = int.Parse(mDataTable.Rows[1][1].ToString());
|
||||||
|
|
||||||
|
mSpectralCount = mDataTable.Rows.Count - 3 - mTotalSpectrometer * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveCSV(DataTable dt, string fullPath)//table数据写入csv
|
||||||
|
{
|
||||||
|
FileInfo fi = new FileInfo(fullPath);
|
||||||
|
if (!fi.Directory.Exists)
|
||||||
|
{
|
||||||
|
fi.Directory.Create();
|
||||||
|
}
|
||||||
|
FileStream fs = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
|
||||||
|
StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
|
||||||
|
string data = "";
|
||||||
|
|
||||||
|
for (int i = 0; i < dt.Columns.Count; i++)//写入列名
|
||||||
|
{
|
||||||
|
data += dt.Columns[i].ColumnName.ToString();
|
||||||
|
if (i < dt.Columns.Count - 1)
|
||||||
|
{
|
||||||
|
data += ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sw.WriteLine(data);
|
||||||
|
|
||||||
|
for (int i = 0; i < dt.Rows.Count; i++) //写入各行数据
|
||||||
|
{
|
||||||
|
data = "";
|
||||||
|
for (int j = 0; j < dt.Columns.Count; j++)
|
||||||
|
{
|
||||||
|
string str = dt.Rows[i][j].ToString();
|
||||||
|
str = str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号
|
||||||
|
if (str.Contains(',') || str.Contains('"')
|
||||||
|
|| str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中
|
||||||
|
{
|
||||||
|
str = string.Format("\"{0}\"", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
data += str;
|
||||||
|
if (j < dt.Columns.Count - 1)
|
||||||
|
{
|
||||||
|
data += ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sw.WriteLine(data);
|
||||||
|
}
|
||||||
|
sw.Close();
|
||||||
|
fs.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 给定文件的路径,读取文件的二进制数据,判断文件的编码类型
|
||||||
|
public Encoding GetType(string FILE_NAME)
|
||||||
|
{
|
||||||
|
FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);
|
||||||
|
Encoding r = GetType(fs);
|
||||||
|
fs.Close();
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通过给定的文件流,判断文件的编码类型
|
||||||
|
public Encoding GetType(FileStream fs)
|
||||||
|
{
|
||||||
|
byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 };
|
||||||
|
byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 };
|
||||||
|
byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM
|
||||||
|
Encoding reVal = Encoding.Default;
|
||||||
|
|
||||||
|
BinaryReader r = new BinaryReader(fs, Encoding.Default);
|
||||||
|
int i;
|
||||||
|
int.TryParse(fs.Length.ToString(), out i);
|
||||||
|
byte[] ss = r.ReadBytes(i);
|
||||||
|
if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF))
|
||||||
|
{
|
||||||
|
reVal = Encoding.UTF8;
|
||||||
|
}
|
||||||
|
else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00)
|
||||||
|
{
|
||||||
|
reVal = Encoding.BigEndianUnicode;
|
||||||
|
}
|
||||||
|
else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41)
|
||||||
|
{
|
||||||
|
reVal = Encoding.Unicode;
|
||||||
|
}
|
||||||
|
r.Close();
|
||||||
|
return reVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否是不带 BOM 的 UTF8 格式
|
||||||
|
private bool IsUTF8Bytes(byte[] data)
|
||||||
|
{
|
||||||
|
int charByteCounter = 1; //计算当前正分析的字符应还有的字节数
|
||||||
|
byte curByte; //当前分析的字节.
|
||||||
|
for (int i = 0; i < data.Length; i++)
|
||||||
|
{
|
||||||
|
curByte = data[i];
|
||||||
|
if (charByteCounter == 1)
|
||||||
|
{
|
||||||
|
if (curByte >= 0x80)
|
||||||
|
{
|
||||||
|
//判断当前
|
||||||
|
while (((curByte <<= 1) & 0x80) != 0)
|
||||||
|
{
|
||||||
|
charByteCounter++;
|
||||||
|
}
|
||||||
|
//标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X
|
||||||
|
if (charByteCounter == 1 || charByteCounter > 6)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//若是UTF-8 此时第一位必须为1
|
||||||
|
if ((curByte & 0xC0) != 0x80)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
charByteCounter--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (charByteCounter > 1)
|
||||||
|
{
|
||||||
|
throw new Exception("非预期的byte格式");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ChangeFileName(string OldPath, string NewPath)
|
||||||
|
{
|
||||||
|
bool re = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (File.Exists(OldPath))
|
||||||
|
{
|
||||||
|
File.Move(OldPath, NewPath);
|
||||||
|
re = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
re = false;
|
||||||
|
}
|
||||||
|
return re;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SaveCSV(string fullPath, string Data)
|
||||||
|
{
|
||||||
|
bool re = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileStream FileStream = new FileStream(fullPath, FileMode.Append);
|
||||||
|
StreamWriter sw = new StreamWriter(FileStream, Encoding.UTF8);
|
||||||
|
sw.WriteLine(Data);
|
||||||
|
//清空缓冲区
|
||||||
|
sw.Flush();
|
||||||
|
//关闭流
|
||||||
|
sw.Close();
|
||||||
|
FileStream.Close();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
re = false;
|
||||||
|
}
|
||||||
|
return re;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user