C#访问路径被拒绝

时间:2016-04-10 23:02:53

标签: c# winforms access-denied

我正在使用DirectX.AudioVideoPlayback(DirectX v9.0c)编写C#WinForms应用程序。我从二进制文件打开一个音频文件,将其转换为Base64字符串,将其串入一个字节数组,然后将其写入硬盘上的临时文件。第二次打开临时文件中的文件时,我有一个特殊的问题。

以下是代码:

private void OpenBinaryFile()
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Title = "Open Binary File...";
        ofd.Multiselect = false;
        ofd.Filter = "Binary File|*.bin";
        if (DialogResult.OK == ofd.ShowDialog())
        {
            glbstrFilePath = ofd.FileName;

            // Read Base64 string from binary file...
            FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            strFileType = br.ReadString();
            String strAudioString = br.ReadString();
            fs.Close();
            br.Close();

            // Convert byte[] to audio... 
            byte[] AudioInBytes = Convert.FromBase64String(strAudioString);
            File.WriteAllBytes(@"C:\MyTemp\thisaudio", AudioInBytes);
            audio = Audio.FromFile(@"C:\MyTemp\thisaudio", false);
            File.SetAttributes(@"C:\\MyTemp\\thisaudio", FileAttributes.Normal);
            File.Delete(@"C:\MyTemp\thisaudio");
        }

如果我使用上面的代码打开一次文件,则文件打开,转换和加载没有问题。如果我尝试使用上面的代码再次加载文件,我得到这个:

  

" System.UnauthorizedAccessException未处理HResult =   -2147024891 Message =访问路径' C:\ MyTemp \ thisaudio'被拒绝。源= mscorlib程序"

那么我怎么能准备这个应用程序每次打开一个文件而不会崩溃?我已经尝试将文件的属性设置为'普通'并以管理员身份运行VS 2015,但都不起作用。我已经google了#34;拒绝访问路径C#WinForms DirectX.AudioVideoPlayback"并且没有一个搜索结果,包括许多在StackOverflow上发布的搜索结果,都有一个适合我的解决方案。此外,我还会根据要求提供完整的堆栈跟踪。

1 个答案:

答案 0 :(得分:0)

根据https://msdn.microsoft.com/en-us/library/windows/desktop/bb324224(v=vs.85).aspx Audio类是一次性的,因此您需要使用

using (var audio = Audio.FromFile(@"C:\MyTemp\thisaudio", false))
{
}
File.SetAttributes(@"C:\\MyTemp\\thisaudio", FileAttributes.Normal);
File.Delete(@"C:\MyTemp\thisaudio");