使用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.DirectoryNotFoundException
和System.UnauthorizedAcessException
等异常。
线程是否会影响所有这些,因为此代码是在运行时加载的代码的一部分,并且浏览是单击事件?
在尝试创建文件之前,您需要确保该目录存在。
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''"目录,这又是错误的。