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单击
后,此行为是否是此操作的结果?