Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以确保某个文件可以在不打开的情况下写入?_C#_.net_Vb.net_File Io - Fatal编程技术网

C# 是否可以确保某个文件可以在不打开的情况下写入?

C# 是否可以确保某个文件可以在不打开的情况下写入?,c#,.net,vb.net,file-io,C#,.net,Vb.net,File Io,我编写了一个用于选择输出文件名的自定义控件,其中包含文件名的典型文本框、“浏览”按钮以及一些特定于我的应用程序的其他功能 文本框的颜色根据文件名的不同而变化。如果无法写入文件位置,它将变为红色。如果该文件已经存在,它将变为黄色。否则,它将保留系统指定的颜色 为了查看文件是否存在,我使用IO.file.exists;很简单 我将“if the file can write to”实现为一个简单的try-catch块,其中实际打开了一个文件,在其中写入了一些内容,关闭了一些内容,然后删除了一些内容。

我编写了一个用于选择输出文件名的自定义控件,其中包含文件名的典型文本框、“浏览”按钮以及一些特定于我的应用程序的其他功能

文本框的颜色根据文件名的不同而变化。如果无法写入文件位置,它将变为红色。如果该文件已经存在,它将变为黄色。否则,它将保留系统指定的颜色

为了查看文件是否存在,我使用IO.file.exists;很简单

我将“if the file can write to”实现为一个简单的try-catch块,其中实际打开了一个文件,在其中写入了一些内容,关闭了一些内容,然后删除了一些内容。如果在任何时候抛出异常,我知道用户不能使用该文件名,我会将文本框变成红色

这是一个包罗万象;因为我正在做我打算做的实际操作,这是很简单的。然而,让软件疯狂地创建和删除文件,只是为了看看是否可以,这似乎是不负责任的

所以我的问题是,如何在不创建文件的情况下复制此功能?我知道我必须:

  • 检查路径是否合法(例如,“z:”不是有效的文件名)。这需要解析路径并确保所有目录都存在
  • 如果该位置存在,我必须检查写入权限。(在这方面存在几个已回答的问题。)
  • 还有别的吗

    编辑

    几分钟后,我看到人们已经投票赞成一个答案,批评我在实际写入文件之前检查文件是否可访问。虽然我感谢专家们从我的问题中“退后”,看看是否有完全不同的方法来实现它,但告诉我我不应该这样做并不是我问题的答案

    因此,让我详细介绍一下我的应用程序(我不希望同时有数百名用户)

    我在数据采集应用程序中使用此文件选择器控件。在许多情况下,您将要运行的测试在某种程度上是“昂贵的”。因此,非常小心地进行设置是至关重要的。覆盖数据可能非常昂贵(对于害怕的用户,我有一个复选框,可以将日期和时间附加到文件名的毫秒)


    因此,我的指示器颜色的目的不是为软件提供一种可靠的方式,让软件知道文件可以写入(检查仍然在它实际必须写入的瞬间完成),这是为了向用户表明,至少他已经正确设置了文件名,所以如果他继续,他保证不会覆盖旧数据,并且他几乎可以肯定最后一分钟的IO错误(文件名输入错误)不会让实验未记录下来。

    我建议这样做-在用户提交操作之前不要检查任何内容。使用当前的方法,即使您验证了该文件是否正常,当用户实际提交写入文件时,它也可能在5秒钟后被锁定。进行初步检查可能只会给用户一个估计成功的错误印象。特别是考虑终端服务器上有100个+同时用户的这一点。 如果没有访问权限,则用Retry/Cancel/etc显示提示没有问题,并让用户决定

    编辑:

    无意冒犯,但关于如何处理此类碰撞有一些标准。Windows标准是向用户显示提示。也要考虑这一点——如果你突然有一个拒绝访问文件夹,这是你不希望有的,你可能需要雇佣另一个系统/网络管理员。 如果手术费用很高,一定要确保这家伙的薪水很高。拜托,如果你的网络在写作过程中瘫痪了怎么办?硬盘驱动器?路由器?写入文件会被中断的原因有很多,您应该为此做好准备。如果您负担不起,请确保您已经投资了良好的基础设施和优秀的人员来支持它

    在地球上,您可以增加成功锁定文件的机会:

    • 选择一个唯一的文件名,使用基于日期时间的哈希作为后缀/前缀
    • 写入用户的主目录,也称为
      %UserProfile%
      ,您很可能会成功

    我建议,在用户提交操作之前,不要检查任何内容。使用当前的方法,即使您验证了该文件是否正常,当用户实际提交写入文件时,它也可能在5秒钟后被锁定。进行初步检查可能只会给用户一个估计成功的错误印象。特别是考虑终端服务器上有100个+同时用户的这一点。 如果没有访问权限,则用Retry/Cancel/etc显示提示没有问题,并让用户决定

    编辑:

    无意冒犯,但关于如何处理此类碰撞有一些标准。Windows标准是向用户显示提示。也要考虑这一点——如果你突然有一个拒绝访问文件夹,这是你不希望有的,你可能需要雇佣另一个系统/网络管理员。 如果手术费用很高,一定要确保这家伙的薪水很高。拜托,如果你的网络在写作过程中瘫痪了怎么办?硬盘驱动器?路由器?写入文件会被中断的原因有很多,您应该为此做好准备。如果您负担不起,请确保您已经投资了良好的基础设施和优秀的人员来支持它

    在地球上,您可以增加成功锁定文件的机会:

    • 选择一个唯一的文件名,使用基于日期时间的哈希作为后缀/前缀
    • 写入用户的主目录,也称为
      %UserProfile%
      ,您很可能会成功

    我可以理解您不想冒丢失“昂贵”数据的风险的问题,因为文件无法写入,一个负责任的程序将尽力避免这种情况

    我会通过缓存结果来实现这一点。在测试运行之前