c# - 即使应用程序(C#/WPF)关闭也锁定文件
问题描述
我想在服务器上存储一些全局应用程序设置。全局设置只能从应用程序中的密码限制区域进行设置。
如果发生这种情况,文件将存储在定义的服务器路径中,当应用程序重新启动时,它会尝试访问路径并加载文件。如果路径无法访问,它将使用上次运行的设置并指示无法连接。
现在我仍然需要一个文件锁或阻止用户更改文件并保存它的东西。因为没有锁,用户只能操作 csv 文件,然后在下次重新启动时加载该文件。
我已经尝试使用文件流设置 Fileaccess,但看起来访问标志仅在文件流打开时才有效。
有人知道即使在应用程序关闭后如何锁定文件?或者至少将外部访问设置为只读而不是读/写?
解决方案
正如所有其他人已经提到的,要么使用文件访问权限,如果这是不可能的(因为管理员总是可以访问文件)使用某种加密。要么使整个文件不可读,要么从内容中计算出一些散列(添加了一些私有盐)并将此散列添加到文件中。
然后,当您在下次重新启动时读取文件时,您会再次重新计算哈希并将其与存储的哈希进行比较。如果匹配,则文件未更改。
但请注意,仍然可能进行重放攻击。用户可以在本地保存旧版本的有效状态文件,然后将其带回给您。
只是为了回答你最初的问题:
不,不可能锁定文件,它只能由您的进程访问。特别是当它位于网络文件夹中时。在这种情况下,服务器决定谁可以访问该文件。
推荐阅读
- twig - 正则表达式获取字符串的一部分:Twig
- amazon-web-services - 通过 Dockerfile 将 S3 文件复制到 Docker Image
- cmake - 如何修复“ld:未找到架构 x86_64clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)”?
- kotlin - 如何从 Kotlin 内部访问函数?
- python - 使用 beautifulsoup 从 html 中提取数据
- java - 尝试将颜色数据从顶点传递到片段着色器时,Vbos 绘制黑色
- reactjs - 在路由上传递参数后如何转到基本网址?
- javascript - Json-server 错误:数据必须是对象。需要将 JSON 数组更改为 JSON 对象
- r - 如何在 R 中运行具有二元结果的高原二次模型?
- android - BLE 4.0/4.1 在 Android 中支持 64 字节的数据传输