0

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

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

但是这个protion失败了。

 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尽管我更改了本地驱动器的安全设置。

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

4

2 回答 2

1

您是否尝试过查看 FileName 的值?可能它给出了错误的值。如果 File name 只包含文件名,那么一定要给出文件名和文件扩展名,如果没有提供任何扩展名,你的程序将把文件名当作它无法找到的目录扩展名。

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

于 2014-12-27T06:29:46.693 回答
1

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

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\",请检查FileNameis not \File1.mp4,它将连接到"D:\John\FYL\\File1.mp4",这是不正确的。

于 2014-12-27T06:32:33.113 回答