gpt4 book ai didi

c# - 如何知道是否可以创建不存在的文件而无需尝试创建它并捕获 IOException

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:57 26 4
gpt4 key购买 nike

我知道之前有人问过这个问题(实际上,我发现了很多或多或少相同的问题,但还没有令人满意的解决方案),但我要改写一下。我想使用 FileInfo 来指示我是否可以在特定磁盘(硬盘/USB 卡/等)和目录上创建(新)文件。

目前面临的问题:

  1. 如果我要创建的文件位于写保护磁盘/USB 卡/等。 - 将抛出 IOException,唯一的问题是它会在一定延迟后抛出(可能在调用 Flush() 之后)

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

那么我怎么知道是否可以在尝试实际创建特定文件之前创建它?

谢谢..

最佳答案

这引起了我的兴趣,足以让我尝试一下,尽管根本没有进行彻底或大量的测试,但这里有一些您可能想要使用的东西(也要注意异常(exception)情况!):

    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);
}

但正如在另一个答案中所述,确实不能保证当您实际从“验证”返回时,在您的下一个写作操作之前不会发生改变情况有效性的事情。

关于c# - 如何知道是否可以创建不存在的文件而无需尝试创建它并捕获 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5016114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com