我的Visual Basic.net代码有问题
我正在制作一种能够记录按键并拍摄屏幕截图的“儿童监控软件”,但我不知道如何在已经存在的情况下创建一个新的.bmp文件。
Try
'the working area excludes all docked toolbars like taskbar, etc.
Dim currentScreen = Screen.FromHandle(Me.Handle).WorkingArea
'create a bitmap of the working area
Using bmp As New Bitmap(currentScreen.Width, currentScreen.Height)
'copy the screen to the image
Using g = Graphics.FromImage(bmp)
g.CopyFromScreen(New Point(0, 0), New Point(0, 0), currentScreen.Size)
End Using
'save the image
'look for the file
If IO.File.Exists(save1.Text) Then
'if exsist then add (2) to the filename
bmp.Save(Save1.text + "(2)" + ".bmp")
'done
End If
bmp.Save(Save1.Text)
End Using
Catch ex As Exception
End Try
End Sub
正如您所看到的,程序会检查bmp文件是否已存在,如果是,程序将生成新的bmp文件。例如:如果file(whatever.bmp)存在,那么它不会覆盖它,而是在文件名exmp:(whatever(2).bmp)中添加“(2)”。
所以问题是我不想为这个函数生成几十行代码,我正在寻找一种自动方式来添加(2),(3),(4)或其他任何文件名如果它已经存在以防止覆盖。
抱歉我的英文不好:D
-Matt
答案 0 :(得分:0)
首先在类声明中初始化一个存储图片索引的变量:
Private picIndex As Long = 0
然后你可以使用Threading.Interlocked.Increment
增加变量号:
bmp.Save(String.Format("{0} {1}.bmp", _
Save1.text, _
Threading.Interlocked.Increment(picIndex)))
如果您正在尝试编写通用程序,那么您将考虑在变量内添加Static
Public shared Sub MakeScreenshot(...)
...
Static picIndex As Long = 0
...
End Sub
答案 1 :(得分:0)
作为一个简单的解决方案,您可以增加数字并检查文件是否存在。如果没有 - 保存它。
For i As Integer = 0 To Int32.MaxValue - 1
Dim name As String = Save1.text + "(" + i + ").bmp"
If Not File.Exists(name) Then
bmp.Save(name)
Exit For
End If
Next
答案 2 :(得分:0)
Dim counter as integer
counter = My.Computer.FileSystem.GetFiles("your image folder path")
bmp.Save(Save1.text & "(" & counter & ")" & ".bmp")