【问题标题】:Preventing other application from opening custom file vb.net防止其他应用程序打开自定义文件 vb.net
【发布时间】:2017-11-07 08:08:00
【问题描述】:

我有一个文本文件。现在我已将其文件类型从.txt 更改为.abc。我的 VB.NET 程序将文本从该文件加载到文本框中。但是,更改文件类型后,记事本和 Word 等其他应用程序能够打开和读取我的 .abc 文件。

有什么方法可以让只有我的应用程序能够打开/读取文件,而其他应用程序不能这样做?我的意思是,假设我有一个 PhotoShop 文档 .psd 文件,没有其他应用程序,而是 photoshop 本身,可以打开它。如何使其他应用无法读取我的文件?

【问题讨论】:

  • 类似这样的东西,但是对于 VB.Net?
  • 嗯..yes ..for vb.net
  • 你可以encrypt the file
  • 我同意@VisualVincent,尽管您的要求不是很清楚——例如,什么时候应该锁定?总是?
  • 我的意思是......假设你有一个 photoshop 文档(.psd)文件。没有其他应用程序,而是 photoshop 本身可以打开它。我如何使其他应用程序无法读取我的文件?

标签: vb.net file-type


【解决方案1】:

没有办法阻止非您开发的应用打开任何文件。扩展程序只是为了帮助我们人类,也许让计算机知道您为扩展程序选择的默认应用程序。

正如您所说,.txt 文件可以被许多应用程序打开。您可以使用记事本、Firefox、VSCode 和许多其他工具打开 .txt 文件。

同样,.psd 文件可以被许多应用打开。您可以使用 Photoshop 打开该 .psd 文件,还可以使用记事本、Firefox 和 VSCode,以及可能与上述相同的应用程序。

区别在于哪些应用可以读取理解文件。 为了使其他应用程序无法理解文件,您需要将其制成无法识别的格式,因为您“秘密”计划了它。

就像上面的 Visual Vincent 所说,您可以以某种方式加密文件,或者您可以拥有一个基本上只有您的应用知道才能理解的二进制文件。

由于您不拥有您希望文件被理解的应用程序,那么您要么必须接受它可以被任何可以打开文件的应用程序打开,或者您可以尝试在应用程序之外加密文件,或者就像用密码压缩它,然后在你想使用它时解密或解压缩。

【讨论】:

  • 但是......他们确实有自己的应用程序
  • SlowLearner,当我说own the app 时,我的意思是成为开发该应用程序的人。我猜 St.Lue 没有完全控制 VB.NET 的源代码和发布。 St.Lue,我很高兴听到这个消息。
【解决方案2】:

首先,任何文件都可以被读取,除非它仍然被特定的进程或服务打开。记事本甚至可以“读取” PhotoShop 文件 - 试试吧!

所以,尝试我的第一个答案...

您可以尝试几种方法来阻止打开文件,例如应用文件锁定。例如,SQL Server .mdf 文件被 SQL Server 服务锁定。发生这种情况是因为文件保持在打开状态,但是;您的应用程序必须保持运行才能使这些文件保持打开状态。但从技术上讲,这些文件仍然可以被复制。

另一种方法是为文件设置隐藏属性。这会对不太精明的用户隐藏文件,但如果用户显示隐藏文件,它将显示。

我的第二个回答:你指的是文件的格式,说只有 PhotoShop 可以读取或写入自己的文件(不是真的,但我知道你在说什么)。

文件的格式必须自己决定。您必须确定如何存储从应用程序输出的数据。您似乎一直在尝试将应用程序数据写入文本文件。也许您应该尝试写入二进制文件。正如 Visual Vincent 在 cmets 中针对您的问题所建议的那样,二进制文件虽然未加密,但仍提供了一种更适合您的数据存储方法。

二进制文件写入原始二进制数据而不是人性化文本。例如,如果您将一个整数写入文件,它将显示为一个四字节的字符串,而不是您通常的 123456789 文本格式。

因此,您确实需要明确要写入文件的数据,确定文件的设置结构(因为您还必须能够read it back in 到您的应用程序)然后能够@ 987654322@.

【讨论】:

  • 我只会在我的文件中写入文本数据......但无论如何......谢谢你的解释......它帮助我理解了很多
  • @St.Lue:没问题。很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2011-04-21
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多