我目前正在使用控制台应用程序来播放新创建的WAV RIFF文件,然后将其删除。就像我说的,它是新创建的,所以我需要确保在开始播放之前文件没有被编辑,否则它将被破坏。播放后,我删除它。
目前,我的代码看起来像这样(使用System.IO):
Sub Main()
Dim fileName As String
fileName = "C:\temp\Burst\Burst.wav"
While CheckFile(fileName)
End While
Try
My.Computer.Audio.Play(fileName, AudioPlayMode.WaitToComplete)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
My.Computer.FileSystem.DeleteFile(fileName)
End Sub
Private Function CheckFile(ByVal filename As String) As Boolean
Try
System.IO.File.Open(filename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
FileClose(1)
Return False
Catch ex As Exception
Return True
End Try
End Function
我用来检查文件是否打开的函数是由sealz创建的。我发现它here。然而,遗憾的是,此函数导致异常,因为它在运行后无法访问该文件,因为它正由另一个进程使用。如果我删除此功能,则可以打开,播放和删除该文件。
例外内容如下:
因此,有助于确定文件是否正在使用的函数实际上是导致文件被打开。好像它没有关闭。无论如何,我可以修改这个当前功能,以便为我的应用程序正常工作,或者有任何其他想法如何解决这个问题。谢谢你的时间。
-Josh
答案 0 :(得分:0)
这是你的问题:
System.IO.File.Open(filename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
FileClose(1)
Return False
使用将有助于:
Using _fs as System.Io.FileStream = System.IO.File.Open(filename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
End Using
Return False
File.Open返回Filestream,而不是FileClose所需的整数
答案 1 :(得分:0)
据我所知,您正在尝试使用System.IO.File.Open
在播放前检查文件是否存在,但是您可以使用 File.Exists 来执行此操作。
如果文件存在于路径上,File.Exists
的方法System.IO
将返回true
,否则返回false
。
你在这里做错了,
While CheckFile(fileName)
End While
如果找到文件,它将进入无限循环,除了重复调用CheckFile
之外没有做任何事情。如果找不到文件,它将不再循环并尝试Audio.Play
和FileSystem.DeleteFile
,最终会收到文件未找到的异常。
以下是您修改并运行的代码。
Imports System.IO
Module Module1
Sub Main()
Dim fileName As String
fileName = "C:\temp\Burst\Burst.wav"
While CheckFile(fileName)
Try
My.Computer.Audio.Play(fileName, AudioPlayMode.WaitToComplete)
'Delete statement here if you want file to be deleted after playback
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End While
My.Computer.FileSystem.DeleteFile(fileName)
Console.ReadLine()
End Sub
Private Function CheckFile(ByVal filename As String) As Boolean
If (File.Exists(filename)) Then
Return True
Else
Return False
End If
End Function
End Module