【问题标题】:System.UnauthorizedAccessException in File.Create c#File.Create c# 中的 System.UnauthorizedAccessException
【发布时间】:2021-04-25 07:22:17
【问题描述】:

编辑:我注意到当我这样做时不会发生这种情况:File.WriteAllText(@"C:\Users\(usr)\Documents\Test\Data\test.txt", "0"); 没有 Globals.dmp 所以显然它必须是 Path.Combine() 我想在用 Visual Studio 制作的 c# 程序中创建一个文件夹和一个文本文件。我正在做的是检查表单加载以查看文件是否存在,如果不存在,则创建文件。
我是这样做的:

if(!File.Exists(Globals.dmp))
            {
                File.Create(Globals.dmp);
                File.WriteAllText(Globals.dmp, "0");
            }

globals.dmp的组成如下:

public static string dmp = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Constants.dmp);

Constants.dmp是这样的:

public static string dmp = @"Test\Data\test.txt

这应该可以,但是当我尝试运行它时,Visual Studio 报告:System.UnauthorizedAccessException: 'Access to the path 'C:\Users\(usr)\Documents\Test\Data\test.txt' is denied.'失败的行是:File.Create(Globals.dmp);
我尝试将File.SetAttributes(Globals.dmp, new FileInfo(Globals.dmp).Attributes | FileAttributes.Normal); 放在File.Create 之上,但同样的事情发生了。非常感谢任何见解。

【问题讨论】:

  • 你在使用 UWP 吗?
  • @ekke 我正在使用带有最新 .net 和 windowsform 的 Visual Studio

标签: c# file unauthorizedaccessexcepti


【解决方案1】:

以管理员身份运行您的 Visual Studio,看看它是否有效。

【讨论】:

  • 我做到了,我也尝试运行构建的程序,结果相同。
  • 我做到了,这就是我得到 file.SetAttribute 的地方,但它不起作用
【解决方案2】:

我通过适配PathCombineAndCanonicalize1()from the second solution in this question解决了这个问题

我所做的是:

            public static string PathCombineAndCanonicalize1(string path1, string path2)
            { 
                string combined = Path.Combine(path1, path2);
                return combined;
            }
            public partial class ProgramDirectories
            {
                public static string directory = @"DillData\";
                public static string documentspath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                public static string pathforfiles = PathCombineAndCanonicalize1(documentspath, directory);
                public static string sps = PathCombineAndCanonicalize1(pathforfiles, Constants.sps);
            }

Constants.sps="text.txt";
然后我可以轻松做到:

if (!Directory.Exists(ProgramDirectories.pathforfiles))
{
     Directory.CreateDirectory(ProgramDirectories.pathforfiles);
}

if(!File.Exists(ProgramDirectories.sps)
{
     File.WriteAllText(ProgramDirectories.sps, "0");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多