using System;
using System.IO;
using System.Threading;
using TDMS.Common;
using TDMS.Default;
using TDMS.Externals;
namespace TDMS
{
///
/// TDMS数据文件的创建类。技术上是工厂模式的创建模式。也是的入口类。
///
public static class TDMSDataBuilder
{
private static readonly int s_waitTimeBeforeOpeningFile = 20; //防止文件正在被其他进程写入(保存)而导致Open失败
static TDMSDataBuilder()
{
#if RELEASE
s_waitTimeBeforeOpeningFile = 50; //生产环境下,等待时间略长一些,以确保成功率。
#endif
var libsDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DDC.DLLDirectory);
VerifyNiLibFiles(libsDirectory);
}
///
/// 检查dll库文件是否存在
///
internal static void VerifyNiLibFiles(string libsDirectory)
{
string[] dllFiles = ["dacasr.dll", "nilibddc.dll", "tdms_ebd.dll"];
foreach (var dllFile in dllFiles)
{
var filePath = Path.Combine(libsDirectory, dllFile);
if(!File.Exists(filePath))
{
throw new FileNotFoundException($"NI TDMS library file does not exist:{filePath}");
}
}
}
public static ITDMSFile BuildNew(string filePath,
string name,
string description = "",
string title = "",
string author = "",
string fileType = Constants.DDC_FILE_TYPE_TDM_STREAMING)
{
ITDMSFile tdmsFile = new TDMSFile();
tdmsFile.Create(filePath, fileType, name, description, title, author);
return tdmsFile;
}
///
/// 打开一个已经存在的TDMS文件
///
/// 文件路径
/// 返回一个文件的实例
public static ITDMSFile OpenExisting(string filePath)
{
ITDMSFile tdmsFile = new TDMSFile();
Thread.Sleep(s_waitTimeBeforeOpeningFile);
tdmsFile.Open(filePath);
return tdmsFile;
}
///
/// 打开一个已经存在的TDMS文件
///
/// 文件信息
/// 返回一个文件的实例
public static ITDMSFile OpenExistingFile(TDMSFileInfo fileInfo)
{
ITDMSFile tdmsFile = new TDMSFile();
Thread.Sleep(s_waitTimeBeforeOpeningFile);
tdmsFile.Open(fileInfo);
return tdmsFile;
}
}
}