如何检查文件 (.wav) 是否打开然后播放文件
How to check if file (.wav) is opened and then play file
我目前正在开发一个控制台应用程序来播放新创建的 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. I found it here 创建的。然而不幸的是,这个函数引发了一个异常,运行后,程序无法访问该文件,因为它正在被另一个进程使用。如果我去掉这个功能,文件可以打开,播放,删除。
异常内容如下:
类型为“System.IO.IOException”的未处理异常发生在 mscorlib.dll 附加信息:进程无法访问文件 'C:\temp\Burst\burst.wav',因为它正被另一个进程使用。
因此,本应帮助确定文件是否正在使用的函数实际上导致文件被打开。好像没关门无论如何我可以修改这个当前函数以适合我的应用程序或者是否有任何其他关于如何解决这个问题的想法。谢谢你的时间。
-乔希
这是您的问题:
System.IO.File.Open(filename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
FileClose(1)
Return False
A 使用会有所帮助:
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 Returns 文件流,而不是 FileClose 所需的整数
据我所知,您正在尝试使用 System.IO.File.Open
在播放前检查文件是否存在,但是您可以使用 File.Exists.
方法 File.Exists
来自 System.IO
returns true
如果文件存在于路径中 returns 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
我目前正在开发一个控制台应用程序来播放新创建的 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. I found it here 创建的。然而不幸的是,这个函数引发了一个异常,运行后,程序无法访问该文件,因为它正在被另一个进程使用。如果我去掉这个功能,文件可以打开,播放,删除。
异常内容如下:
类型为“System.IO.IOException”的未处理异常发生在 mscorlib.dll 附加信息:进程无法访问文件 'C:\temp\Burst\burst.wav',因为它正被另一个进程使用。
因此,本应帮助确定文件是否正在使用的函数实际上导致文件被打开。好像没关门无论如何我可以修改这个当前函数以适合我的应用程序或者是否有任何其他关于如何解决这个问题的想法。谢谢你的时间。
-乔希
这是您的问题:
System.IO.File.Open(filename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
FileClose(1)
Return False
A 使用会有所帮助:
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 Returns 文件流,而不是 FileClose 所需的整数
据我所知,您正在尝试使用 System.IO.File.Open
在播放前检查文件是否存在,但是您可以使用 File.Exists.
方法 File.Exists
来自 System.IO
returns true
如果文件存在于路径中 returns 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