我是C#的新手并且有一个项目,我有一个List String,并且必须使用某些扩展来过滤掉一些图像。这是我的代码
// App Config
<add key="FilterImages" value=".jpg ,.gif"/>
List<string> _FilterList = new List<string>();
string[] FilterList = ConfigurationManager.AppSettings["FilterImages"].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in FilterList)
{
_FilterList.Add(s.Trim().ToLower());
}
var files = newFiles.ListDirectory(".");
foreach (var f in files)
{
// Here new files come and I can get the file names using
// f.name ... How can I check for correct extension here
}
在ForEach循环中,我想使用 _FilterList 并检查新文件的文件扩展名。我可以使用 f.Name 获取文件名,任何建议都会很棒
答案 0 :(得分:2)
尝试这样的事情,只需在FilterList
中查找文件扩展名即可。
这可能无法编译,但它知道如何查找有效的文件扩展名。
foreach (var f in files)
{
if(_FilterList.Contains(Path.GetExtension(f.FileName))
{
//Do your stuff
}
}
或者您可以使用Linq
var allowedFiles = files.Where(p => _FilterList.Any(l => p.Contains(l)).ToList();
答案 1 :(得分:2)
首先,让我们获取要过滤掉的扩展名; HashSet<string>
似乎是一个更好的收藏
HashSet<string> extensions = new HashSet<string>(ConfigurationManager
.AppSettings["FilterImages"].ToString()
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(item => item.Trim()),
StringComparer.OrdinalIgnoreCase); // ".GIF" should be treated as ".gif"
然后我们可以开始检查files
:
var files = newFiles.ListDirectory(".");
foreach (var f in files) {
// if "f" is FileInfo we can use f.FullName
// if "f" is string then put just f, not f.FullName
if (extensions.Contains(Path.GetExtension(f.FullName))) {
// file has a correct extension
}
}
答案 2 :(得分:1)
首先,您可以使用LinQ将代码分解为:
var _FilterList = ConfigurationManager.AppSettings["FilterImages"].ToString()
.Split(',')
.Select(p => p.Trim().ToLower())
.ToList();
var files = newFiles.ListDirectory(".");
获取Filtered文件路径:
var acceptedFiles = files.Where(p => _FilterList.Any(l => p.Contains(l)).ToList();
var unAcceptedFiles = files.Where(p => !_FilterList.Any(l => p.Contains(l)).ToList();