C#文件流拒绝访问

C#文件流拒绝访问,c#,filestream,C#,Filestream,我正在尝试使用C#创建一个文件,然后将文件读回以填充一个富文本块。现在我的问题是创建/写入文件 FileStream fs = File.Create(@".\\tmp\" + fileName); 这就是我想写信给的地方\tmp\存在,但在尝试写入时出错,表示 \tmp\filename访问被拒绝 问题可能是运行应用程序的用户可能没有写入该目录的权限。最简单的测试方法是以管理员身份运行应用程序,您应该有权写入该目录 您可能还想考虑写入当前目录,不管运行应用程序的用户至少应该访问该目录 Sys

我正在尝试使用C#创建一个文件,然后将文件读回以填充一个富文本块。现在我的问题是创建/写入文件

FileStream fs = File.Create(@".\\tmp\" + fileName);
这就是我想写信给的地方\tmp\存在,但在尝试写入时出错,表示

\tmp\filename访问被拒绝


问题可能是运行应用程序的用户可能没有写入该目录的权限。最简单的测试方法是以管理员身份运行应用程序,您应该有权写入该目录

您可能还想考虑写入当前目录,不管运行应用程序的用户至少应该访问该目录

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)

您使用的是一个相对路径,该路径指向您无法访问的位置

一个可能的解决办法是:

  • 创建文件夹C:/data,并确保您对该文件夹具有读写权限

  • 将代码更改为

    string fileName = "file.txt";
    FileStream fs = File.Create(@"C:/data/" + fileName);
    
  • 假设您具有正确的读写权限,则应在C:/data下创建一个文件名为“file.txt”的文件

    如果需要当前用户根目录的相对路径,请使用:

    string currentUserDirectory = 
           Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
    

    可能您没有访问相对路径的权限。 要获取程序集目录,请执行以下操作:

    private static string AssemblyDirectory
    {
        get
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            return Path.GetDirectoryName(path);
        }
    }
    
    然后


    我是运行程序的人,“.”文件夹位于我自己的用户文件夹中。我不知道为什么我不能访问它。我用管理员权限启动了VS,但并没有修复它。相对文件路径指向我自己的用户目录。我知道事实上我有权知道。在创建文件夹之前和之后,我曾经尝试过使用“C:/tmp/”,这会产生相同的问题。程序运行在哪个用户下?这可能是导致问题的原因。为什么我没有访问权限?这至少有助于我了解发生了什么。这在“.”下,它翻译成类似于
    /users/[me]/source/repos../app1/x86/debug/tmp/
    的东西,它在我的用户文件夹下。我认为“.”表示程序集运行的目录,但为了更好地使用函数
    AssemblyDirectory
    。我正在尝试您的代码,但是
    GetExecutingAssembly()
    似乎无效。我有一套系统。其他所有东西都不会弄乱
    getExecutionGassembly()
    位于
    System.Reflection.Assembly
    中。哪一个是错误?导入System.Reflection.Assembly后,Reflection.Assembly不存在。没有它,就是getExecutionGassembly不包含在程序集中
    FileStream fs = File.Create(Path.Combine(AssemblyDirectory, fileName));