到目前为止,我有以下几点:简化的逻辑,以避免重复错误信息
// Gets all the drives
DriveInfo[] allDrives = DriveInfo.GetDrives();
// checks if any CD-Rom exists in the drives
var cdRomExists = allDrives.Any(x => x.DriveType == DriveType.CDRom);
// Get all the cd roms
var cdRoms = allDrives.Where(x=>x.DriveType==DriveType.CDRom);
if (cdRomExists.Equals(true))
{
// Loop through the cd roms collection
foreach(var cdRom in cdRoms)
{
Console.WriteLine("Drive {0}", cdRom.Name);
Console.WriteLine(" File type: {0}", cdRom.DriveType);
if (cdRom.IsReady == true)
{
if (cdRom.DriveType == DriveType.CDRom)
{
DirectoryInfo di = new DirectoryInfo(cdRom.RootDirectory.Name);
var file = di.GetFiles("*.csv", SearchOption.AllDirectories).FirstOrDefault();
if (file == null)
{
errorwindow.Message = LanguageResources.Resource.File_Not_Found;
dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
}
else
{
foreach (FileInfo info in di.GetFiles("*.csv", SearchOption.AllDirectories))
{
Debug.Print(info.FullName);
ImportCSV(info.FullName);
break; // only looking for the first one
}
}
}
}
else if (cdRom.IsReady == false)
{
errorwindow.Message = LanguageResources.Resource.CDRom_Not_Ready;
dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
}
}
}
else
{
errorwindow.Message = LanguageResources.Resource.CDRom_Error;
dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
}
有以下的问题,错误消息连续弹出两次,表示如果没有CD-ROM中驱动器,因为我的电脑同时包含DVD和蓝光驱动器。如果有一个包含CSV文件的CD Rom,它会成功导入,但由于运行到蓝光驱动器的foreach循环会弹出另一条消息,并弹出。
我只想显示一个错误消息,对于这些情况: - 如果没有光盘是准备并包含在驱动 - 如果光驱CSV不包含CSV
我认为我的逻辑过于复杂,我需要帮助调整我的逻辑陈述。
使用'break'如果没有csv文件发生一些错误(在MessageBox之后)。 –
如果将原始查询调整为仅将已准备就绪的驱动器撤回,则可能会更容易。你也不需要'Any()'和'Where()'调用;如果没有这样的驱动器,那么'Where()'将返回一个长度为0的序列,您可以事先对其进行测试,或者只是对序列进行迭代,因为对空序列不做任何处理。 – barrick