使用FileStream并处理其奇怪的异常

本文关键字:异常 FileStream 处理 使用 | 更新日期: 2023-09-27 18:35:27

当我在代码中声明了固定的文件+文件路径并且被理解为有效时,以下代码对我有用。

  NetworkStream netStream = client.GetStream();
        string FileName = @"D:'John'FYL'video1.mp4";
        Directory.CreateDirectory(Path.GetDirectoryName(FileName));
        using (FileStream fs = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write))
        {
            netStream.CopyTo(fs);
        }
        netStream.Close();
    }

但这个提议失败了。

 NetworkStream netStream = client.GetStream();
        //  FileName is taken at run time on button click from textbox.
        using (FileStream fs = new FileStream(@"D:'John'FYL'"+FileName, FileMode.OpenOrCreate, FileAccess.Write))
        {
            netStream.CopyTo(fs);
        }
        netStream.Close();
    }

现在,当我检查另一个案例时,使用 File.Create 并在运行时获得FileName它的工作原理。

    FileStream output = File.Create(@"D:'John'" + FileName)

我很怀疑,因为我必须在运行时从"浏览"对话框中获取保存位置,但是为什么尽管我更改了本地驱动器的安全设置,FileStream fs = new FileStream(@"D:'John'FYL'+FileName会抛出System.IO.DirectoryNotFoundExceptionSystem.UnauthorizedAcessException等异常。

线程是否会影响所有这些,因为此代码是在运行时加载的代码的一部分,并且浏览是单击事件?

使用FileStream并处理其奇怪的异常

在尝试创建文件之前,您需要确保该目录存在。

NetworkStream netStream = client.GetStream();
if (!Directory.Exists(@"D:'John'FYL'" + FileName)) {
    Directory.CreateDirectory(@"D:'John'FYL'" + FileName);
}
using (FileStream fs = new
    FileStream(@"D:'John'FYL'" + FileName, FileMode.OpenOrCreate, FileAccess.Write))
{
    netStream.CopyTo(fs);
}
netStream.Close();

您可能还需要检查变量FileName的格式是否正确。由于您已经提供了一个尾随反斜杠"D:'John'FYL'",请检查FileName是否未'File1.mp4,这将连接成"D:'John'FYL''File1.mp4",这是不正确的。

您是否尝试过查看文件名的值? 可能它给出了错误的值。如果文件名仅包含文件名,请确保将名称与文件扩展名一起提供,如果未提供任何扩展名,则程序会将该名称视为无法找到的目录扩展名。

如果文件名包含名称以及目录层次结构,那么您只是将一个目录连接到您的"D:''John''"目录,这又是错误的。