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

C# 使用FileStream并处理其奇怪的异常,c#,winforms,file-io,client-server,system.io.file,C#,Winforms,File Io,Client Server,System.io.file,当我在代码中声明了一个固定的文件+文件路径,并且被理解为可以工作时,下面的代码对我有效 NetworkStream netStream = client.GetStream(); string FileName = @"D:\John\FYL\video1.mp4"; Directory.CreateDirectory(Path.GetDirectoryName(FileName)); using (FileStream fs = new F

当我在代码中声明了一个固定的文件+文件路径,并且被理解为可以工作时,下面的代码对我有效

  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=newfilestream(@“D:\John\FYL\+FileName
抛出异常,如
System.IO.DirectoryNotFoundException
System.unauthorizedacesexception
,尽管我更改了本地驱动器的安全设置


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

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


如果文件名包含名称和目录继承人权限,那么您只是将一个目录连接到“D:\John\”目录,这同样是错误的。

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

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();

您可能还需要检查变量
文件名
的格式是否正确。由于您已经提供了一个尾随反斜杠
“D:\John\FYL\”
,请检查
文件名
是否不是
\File1.mp4
,它将连接到
“D:\John\FYL\\File1.mp4”
,这是不正确的。

我在一个从表单\u load()开始的线程中使用此代码。它是否应该等待浏览\u单击以创建
文件流()
?。顺便说一句,你的建议返回了
在mscorlib.dll中发生了类型为'System.IO.DirectoryNotFoundException'的未经处理的异常附加信息:找不到路径'D:\John\FYL\'的一部分。
@Khan你是说该代码是在单击
浏览
按钮之前执行的吗?这意味着
文件名称
变量甚至还没有加载?文件名从
文本框中获取其值。文本
浏览\u单击
后,此行为是否是此操作的结果?