Vb.net 使用列表中的Directory.GetFiles避免某些文件
在这个应用程序中,我正在处理用户从一个组合框中选择一个子文件名,该子文件夹中最多有5张图片(在开始处)。这些图像的名称是相机输出的,这意味着我不知道文件名。此应用程序的目的是让用户预览1-5个小缩略图图片框中的图像,然后一次选择一个,并使用radiobuttons options中的文本字符串保存它们,按下“重命名”按钮后,代码将所选图像保存为所选名称 所有这些都有效,但我有两个问题 第一。保存图像后,文件夹中现在有5张以上的jpeg图像,这些正在保存的图像将始终包含以下文字: pic主轴、PicRotorTop、PicRotorBottom、PicDunnageFinal或PicDunnageLayer 那么,有没有办法避免使用我已有的代码在Vb.net 使用列表中的Directory.GetFiles避免某些文件,vb.net,image,Vb.net,Image,在这个应用程序中,我正在处理用户从一个组合框中选择一个子文件名,该子文件夹中最多有5张图片(在开始处)。这些图像的名称是相机输出的,这意味着我不知道文件名。此应用程序的目的是让用户预览1-5个小缩略图图片框中的图像,然后一次选择一个,并使用radiobuttons options中的文本字符串保存它们,按下“重命名”按钮后,代码将所选图像保存为所选名称 所有这些都有效,但我有两个问题 第一。保存图像后,文件夹中现在有5张以上的jpeg图像,这些正在保存的图像将始终包含以下文字: pic主轴、Pi
目录.GetFiles
中使用那些字符串的jpeg文件呢?也许有更好的方法可以做到这一点,但这是我用我的知识所能做的一切。可以使用file.move
或以某种方式替换图像,而不是将图像保存为新名称并向文件夹中添加更多jpeg文件
第二,一旦我知道如何在jpeggetfile
名称中排除上述字符串,我需要使用我将添加的“清除图片”按钮释放和删除所有旧文件
我在网上得到了一些代码,整天都在拼凑。但现在我遇到了一个路障,找不到任何能帮助我度过这一关的东西
代码:
GetFiles代码:
Public Sub Picture_Preview()
Dim FileName As String = cmbPartNumber.Text
Dim pics() As PictureBox
Dim List() As String = Directory.GetFiles("\\HOMESHARE01\Public\Reference Cards\Completed Reference Cards by Part Number" & "\" & FileName, "*.jpg")
If List.Length = "5" Then
pics = {picPreview1, picPreview2, picPreview3, picPreview4, picPreview5}
End If
If List.Length = "4" Then
pics = {picPreview1, picPreview2, picPreview3, picPreview4}
End If
If List.Length = "3" Then
pics = {picPreview1, picPreview2, picPreview3}
End If
If List.Length = "2" Then
pics = {picPreview1, picPreview2}
End If
If List.Length = "1" Then
pics = {picPreview1}
End If
If List.Length = "0" Then
MsgBox("No Pictures in File")
Exit Sub
End If
For i As Integer = 0 To pics.Count - 1
pics(i).Image = Image.FromFile(List(i))
Next
picPreview1.SizeMode = PictureBoxSizeMode.StretchImage
picPreview2.SizeMode = PictureBoxSizeMode.StretchImage
picPreview3.SizeMode = PictureBoxSizeMode.StretchImage
picPreview4.SizeMode = PictureBoxSizeMode.StretchImage
picPreview5.SizeMode = PictureBoxSizeMode.StretchImage
picSelectedPic.SizeMode = PictureBoxSizeMode.StretchImage
End Sub
首先,您通常应该喜欢
EnumerateFiles()
而不是GetFiles()
,尤其是如果您想过滤结果的话。这将使用一个助手函数筛选出您不想要的:
Dim txFiles = Directory.EnumerateFiles("C:\Temp", "*.*",
System.IO.SearchOption.TopDirectoryOnly).
Where(Function(q) IncludeFile(q)).ToArray()
用于筛选它们的帮助函数:
Private Function IncludeFile(f As String) As Boolean
Dim exclude() = {"PicSpindle", "PicRotor", "PicFoo"}
Dim filepart As String
For Each s In exclude
filepart = Path.GetFileName(f)
If filepart.StartsWith(s, StringComparison.InvariantCultureIgnoreCase) Then
Return False
End If
Next
Return True
End Function
你将不得不根据细节来调整排除逻辑……我无法在代码墙中找到你的
GetFiles
来检查它。首先,你应该倾向于EnumerateFiles()
而不是GetFiles()
,尤其是如果你想过滤结果的话。这将使用一个助手函数筛选出您不想要的:
Dim txFiles = Directory.EnumerateFiles("C:\Temp", "*.*",
System.IO.SearchOption.TopDirectoryOnly).
Where(Function(q) IncludeFile(q)).ToArray()
用于筛选它们的帮助函数:
Private Function IncludeFile(f As String) As Boolean
Dim exclude() = {"PicSpindle", "PicRotor", "PicFoo"}
Dim filepart As String
For Each s In exclude
filepart = Path.GetFileName(f)
If filepart.StartsWith(s, StringComparison.InvariantCultureIgnoreCase) Then
Return False
End If
Next
Return True
End Function
你将不得不根据细节修改排除逻辑……我无法在那堵代码墙中找到你的
GetFiles
,来检查它。需要查看的代码太多了。“正在保存的这些图片将始终包含这些单词”,您是指这些图片的文件名吗?顺便说一句,Image.Save
为jpeg可能会产生令人失望的结果。您可能希望查看并使用更高质量的设置(如80&)。这需要查看大量代码。“正在保存的这些图片将始终包含这些单词”,您是指这些图片的文件名吗?顺便说一句,Image.Save
为jpeg可能会产生令人失望的结果。你可能想看看并使用一个更高质量的设置(比如80&)。哈哈,对不起,上次我问一个问题,这里有人给了我一个困难的时间,因为我没有把我所有的代码。我更新了问题,所以它将GetFiles
sub分割出来。谢谢,我会尝试使用Helper。效果很好!我不得不改变一些逻辑,但是的,它是有效的,谢谢!哈哈,对不起,上次我问了一个问题,有人在这里给了我一个困难的时间,因为我没有把我所有的代码。我更新了问题,所以它将GetFiles
sub分割出来。谢谢,我会尝试使用Helper。效果很好!我不得不改变一些逻辑,但是的,它是有效的,谢谢!