首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道是否可以在不尝试创建文件和捕获IOException的情况下创建不存在的文件

如何知道是否可以在不尝试创建文件和捕获IOException的情况下创建不存在的文件
EN

Stack Overflow用户
提问于 2011-02-16 11:58:14
回答 2查看 1.9K关注 0票数 1

我知道以前有人问过这个问题(实际上,我发现了很多类似问题的例子,但还没有令人满意的解决方案),但我要换个说法。我想使用FileInfo来指示是否可以在特定的磁盘(硬盘/usb卡/等)上创建一个(新的)文件。还有目录。

我目前面临的问题是:

如果我要创建的文件位于写入保护的磁盘/USB卡/等等上,则会抛出一个,问题只是在某个延迟之后(可能在调用()之后)抛出

  1. ,因为我要创建的文件不存在,FileInfo.IsReadOnly将始终返回true,即使给定的路径实际上并不是写保护的!它只在文件已经存在且不是只读的情况下才返回false。

那么,在尝试实际创建文件之前,我如何知道是否可以创建特定的文件呢?

谢谢..。

EN

Stack Overflow用户

发布于 2011-02-16 12:29:18

这让我有了足够的兴趣尝试一下,尽管根本没有经过彻底或大量的测试,以下是您可能需要处理的几件事情(也要注意异常!):

代码语言:javascript
运行
复制
    static bool CanCreateFile(FileInfo fileInfo)
    {
        if (fileInfo.Exists) return false;
        return !fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly);
    }

    static bool CanCreateFile2(FileInfo fileInfo)
    {
        if (fileInfo.Exists) return false;
        return IsDirectoryWriteable(
            Path.GetDirectoryName(fileInfo.FullName));
    }

    static bool IsDirectoryWriteable(string path)
    {
        var directoryInfo = new DirectoryInfo(path);
        if (!directoryInfo.Exists)
        {
            return IsDirectoryWriteable(directoryInfo.Parent.FullName);
        }
        return !directoryInfo.Attributes.HasFlag(FileAttributes.ReadOnly);
    }

但正如另一个答案所述,当你真正从“确认”中返回时,并不能保证在你的下一次写作行动之前,某些事情不会改变情况的有效性。

票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5016114

复制
相关文章

相似问题

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