dar*_*rda 0 .net c# vb.net file-io
我为输出文件名选择编写了一个自定义控件,其中包含文件名的典型:文本框,"浏览"按钮以及特定于我的应用程序的一些其他功能.
文本框根据文件名更改颜色.如果无法写入文件位置,则会变为红色.如果文件已存在,则变为黄色.否则,它仍然是系统指定的颜色.
要查看文件是否存在,我使用IO.File.Exists; 很简单.
我实现了"如果文件可以写入"作为一个简单的try-catch块,其中文件实际打开,写入其中,关闭,然后删除.如果在任何时候抛出异常,我知道用户不能使用该文件名,我将文本框变为红色.
这是一个全能的; 因为我正在做我打算做的实际操作,所以它是万无一失的.然而,让软件创建和删除疯狂的文件似乎是不负责任的,只是为了看它是否可以.
所以我的问题是,如何在不创建文件的情况下复制此功能?我可以看到我必须:
还有别的事吗?
编辑
几分钟内,我看到人们都已经投票最多的是批评,我正在检查一个答案在所有该文件是它发生的实际写入之前访问.虽然我很欣赏专家从我的问题中"退后一步",看看是否有完全不同的方法来实现它,告诉我我不应该这样做,这不是我的问题的答案.
所以让我详细说明我的应用程序(我不希望同时有数百个用户).
我在数据采集应用程序中使用此文件选择器控件.在许多情况下,您即将运行的测试以某种方式"昂贵".因此,非常谨慎地进行设置至关重要.覆盖数据可能非常昂贵(对于可怕的用户,我有一个复选框,将日期和时间追加到毫秒到文件名).
因此,我的指示器颜色的目的不是为软件提供一个确定文件可以写入的确定方式(该检查仍然在它实际必须的时刻完成),它是作为用户的指示器,至少他已正确设置文件名,所以如果他继续前进,他保证不会覆盖旧数据,他几乎可以确定最后一分钟的IO错误(文件名错误)不会让实验运行未记录.
我建议这样做 - 在用户提交动作之前不要检查任何内容.使用您当前的方法,即使您验证了文件是可以的,它也可能在用户实际提交写入文件后5秒钟被锁定.进行初步检查可能只会给用户一个估计成功的错误印象.特别是在具有100多个并发用户的终端服务器上考虑这一点.
使用重试/取消/等显示提示没有任何问题.如果没有访问权限,让用户决定.
编辑:
没有冒犯,但有关于如何处理这种碰撞的标准.Windows标准是向用户显示提示.还要考虑这一点 - 如果您突然对该文件夹的写入权限拒绝,您可能需要聘请其他系统/网络管理员.
如果操作成本高,请确保这个人的报酬很高.来吧,如果您的网络在写作期间出现故障怎么办?硬盘?路由器?写入文件可能会被中断的原因有很多,您应该为此做好准备.如果你负担不起,请确保你投资了良好的基础设施和优秀的人才来支持它.
在地球上,你可以增加获得成功锁定文件的机会:
%UserProfile%,您很可能会成功.