首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.UnauthorizedAccessException in File.Create c#

System.UnauthorizedAccessException in File.Create c#
EN

Stack Overflow用户
提问于 2021-04-25 07:22:17
回答 2查看 732关注 0票数 0

编辑:我注意到当我只做:没有File.WriteAllText(@"C:\Users\(usr)\Documents\Test\Data\test.txt", "0"); Globals.dmp的时候不会发生这种情况,所以很明显,它肯定是用Path.Combine()做的,我尝试了各种不同的构图,但是结果都一样。

我想在用Visual制作的c#程序中创建一个文件夹和一个文本文件。我要做的是在表单加载时检查该文件是否存在,如果不存在,则创建该文件。

我就是这样做的

代码语言:javascript
复制
if(!File.Exists(Globals.dmp))
            {
                File.Create(Globals.dmp);
                File.WriteAllText(Globals.dmp, "0");
            }

globals.dmp的组成如下:

代码语言:javascript
复制
public static string dmp = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Constants.dmp);

Constants.dmp是这样的:

代码语言:javascript
复制
public static string dmp = @"Test\Data\test.txt

这应该可以,但是当我尝试运行它时,Visual报告: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之上,但同样的事情也发生了。任何洞察力都会受到极大的赞赏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-26 20:46:57

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

我所做的是:

代码语言:javascript
复制
            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";

然后我就可以轻松地做:

代码语言:javascript
复制
if (!Directory.Exists(ProgramDirectories.pathforfiles))
{
     Directory.CreateDirectory(ProgramDirectories.pathforfiles);
}

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

Stack Overflow用户

发布于 2021-04-25 07:57:03

以管理员身份运行您的visual studio,并查看它是否有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67250783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档