首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# -在创建的目录上获取UnauthorizedAccessException

C# -在创建的目录上获取UnauthorizedAccessException
EN

Stack Overflow用户
提问于 2018-06-17 07:03:39
回答 1查看 524关注 0票数 0

在我的应用程序上,我有一个配置文件阅读器-这些检查在启动时检查是否存在Temp目录(在应用程序文件夹上,配置将被存储为Config.json),否则应用程序将创建它。这些步骤在很长一段时间内都是正确的。

经过几天的开发,我今天创建了一个简单的File-Downloader:

代码语言:javascript
复制
    public static void Download(string url, string destination, Callback OnSuccess) {
        System.Diagnostics.Debug.WriteLine("[Download] " + url + " to " + destination + " (" + Utils.getFileName(url) + ")");
        using (var client = new WebClient())
            {
                client.Headers[HttpRequestHeader.UserAgent] = Software.getName() + "/" + Software.getVersion() + " (" + Software.getOSVersion() + "; " + Software.getOSBit() + "; " + Software.getOSVersionFull() + ")";

                client.DownloadDataCompleted += (s, e) =>
                {
                    var text = e.Result;
                    File.WriteAllText(destination, Path.Combine(destination, Utils.getFileName(url)));
                    OnSuccess((Object) Path.Combine(destination, Utils.getFileName(url)));
                };
                client.DownloadDataAsync(new Uri(url));
            }
    }

当我尝试将一个文件下载到之前创建的Temp目录时,出现了一个UnauthorizedAccessException。奇怪的是:应用程序成功地创建了目录,配置文件将被创建/readed/writed。

但是当我尝试下载一个文件时:

代码语言:javascript
复制
API.Download(media.URL, Software.getPath() + "Temp", OnSuccess);

Debug-下载程序的输出:

到C:\Users\

\Documents\Users开发Projects\SongManager\SongManager\bin\Debug\Temp (48afbe6c-9aeb-4cc7-82cf-e04d5f0d6b44.mp3)的 Download

我不会给一个UnauthorizedAccessException

夏普开发:对路径“C:\Users\info\Documents\

System.UnauthorizedAccessException”的访问被拒绝。

编辑

当我使用另一个目录时,同样的问题也会出现,这个目录将在下载开始之前实时创建。

编辑2

我的第二个想法是,这是一个线程问题,因为DownloadDataAsync运行在另一个线程上。但是一个

代码语言:javascript
复制
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate {
    File.WriteAllText(destination, Path.Combine(destination, Utils.getFileName(url)));
}));

不会解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-17 09:21:05

我管这叫恶作剧

File.WriteAllText Method (String, String)

参数

  • path

代码语言:javascript
复制
- Type: System.String
- The file to write to.

  • contents

代码语言:javascript
复制
- Type: System.String
- The string to write to the file.

你的代码

代码语言:javascript
复制
client.DownloadDataCompleted += (s, e) =>
         {
            var text = e.Result;
            // look at your parameters 
            File.WriteAllText(destination, Path.Combine(destination, Utils.getFileName(url)));
            OnSuccess((Object)Path.Combine(destination, Utils.getFileName(url)));
         };

您正在对一个目录调用File.WriteAllText,并将组合路径作为内容进行传递。

错误应该是,

“离开键盘,年轻的绝地武士,给自己弄杯咖啡!一个目录不是一个文件,你没有理由去写它”

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

https://stackoverflow.com/questions/50892431

复制
相关文章

相似问题

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