检查现有文件
本文关键字:文件 检查 | 更新日期: 2023-09-27 18:31:42
>我需要一种方法来检查图片是否已经在lbl_Dias中。如果没有添加图片,如果是,请移动到下一张图片。
这是为了制作一个随机顺序的图像列表,但没有都柏林。
到目前为止,我得到的是这个
protected void DiasShow()
{
string[] getFiles = Directory.GetFiles(HttpContext.Current.Server.MapPath("/CSS/Design/Page_Design/Dias/1920x1080/"));
for (int i = 0; i <= GetFiles.Length; i++)
{
Random FindRandom = new Random();
string RandomFileName = getFiles[FindRandom.Next(getFiles.Length)];
FileInfo ImageName = new FileInfo(RandomFileName);
string FileType = ImageName.Name.Substring(ImageName.Name.Length - 4);
if ((FileType.ToUpper() == ".JPG") || (FileType.ToUpper() == "JPEG"))
{
lbl_Dias.Text += "<img src='"CSS/Design/Page_Design/Dias/1920x1080/" + ImageName.Name + "'" />";
}
}
}
希望你们能帮上忙,我有点股票^^
首先,摆脱NumberOfImages,因为它毫无意义。整个 foreach 循环很糟糕,因为您正在迭代不需要它的集合。
其次,您可以使用FileInfo的扩展属性来检查文件的扩展字符串 - 无需子字符串等。
第三,你到底想在这里做什么?
您确实意识到在循环结束时可能会获得随机重复项,因为您不会从集合中删除使用过的图像。
最后,您根本不需要检查文件是否存在,因为您是从返回现有文件的函数中获取的。
protected void DiasShow()
{
var mapPath = HttpContext.Current.Server.MapPath("/CSS/Design/Page_Design/Dias/1920x1080/");
var images =
Directory.GetFiles(mapPath).Select(
file => new FileInfo(file)).Where(fi =>
fi.Extension.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
fi.Extension.EndsWith("jpeg", StringComparison.OrdinalIgnoreCase)).ToList();
var rand = new Random();
while (images.Count > 0)
{
var i = rand.Next(images.Count);
lbl_Dias.Text += "<img src='"CSS/Design/Page_Design/Dias/1920x1080/" + images[i].Name + "'"/>";
images.RemoveAt(i);
}
}
我认为您只想以随机顺序列出文件:
protected void DiasShow()
{
var getFiles = Directory.GetFiles(HttpContext.Current.Server.MapPath("/CSS/Design/Page_Design/Dias/1920x1080/")); //Find alle filer I en mappe
var random = RandomiseList(getFiles);
var txt = new StringBuilder();
foreach (var randomFileName in random)
{
var fileType = System.IO.Path.GetExtension(randomFileName).ToUpper();
if ((fileType == ".JPG") || (fileType == ".JPEG"))
{
var imageName = System.IO.Path.GetFileName(randomFileName);
txt.Append("<img src='"CSS/Design/Page_Design/Dias/1920x1080/" + imageName+ "'" />");
}
}
lbl_Dias.Text += txt.ToString();
}
public static T[] RandomiseList<T>(T[] source)
{
var rand = new Random(); //no need for own seed
var list = new List<T>(source); //copy to a new list which we can remove from
var result = new T[source.Length];
for (int i = 0; i < source.Length; i++)
{
var listIndex = rand.Next(list.Count());
result[i]= list[listIndex];
list.RemoveAt(listIndex);
}
return result;
}
由于没有代码检查文件,因此我假设您正在检查文件名。
从lbl_Dias中提取文本后使用 Contains() 或正则表达式匹配。
您可以列出文件名。
每次分配文件名时,您都会检查它是否在列表中,如果没有将其添加到列表中,如果存在,请查找其他文件。
要验证某些内容不在标签的文本中,请有一个相应的字典,并在将其添加到标签之前对其进行检查,例如
Dictionary<string, int> _filenames = new Dictionary<string,int>();
....
if (_filenames.ContainsKey( ImageName.Name ) == false)
{
_filenames.Add(ImageName.Name, 0);
lbl_Dias.Text += "<img src='"CSS/Design/Page_Design/Dias/1920x1080/" + ImageName.Name + "'" />";
}