【问题标题】:vb.net folder and files only accesible by applicationvb.net 文件夹和文件只能由应用程序访问
【发布时间】:2013-11-12 15:28:27
【问题描述】:

有没有办法让文件夹和/或文件只能由应用程序访问

我记得玩过一个游戏,其中有一个包含资源的大文件,并且只能由应用程序访问。

我正在尝试做同样的事情。

我已经研究过压缩文件夹,但我不想将内容提取到某个位置,除非该位置只能由应用程序访问。

我也研究过加密,有没有办法让整个文件夹或文件保持加密,让应用程序只能读取它?

我希望应用程序只能访问某些文件。

【问题讨论】:

  • 如果您希望只有应用程序能够使用您需要加密的数据。要成为该文件夹的所有者,您的应用程序必须以某种超级用户身份运行并拥有该文件夹的所有权。这只是球场之外的地方。或者使用上一条评论中的推荐。
  • 我不认为隔离存储是一个解决方案,因为文件夹是动态的,有时会很大。我不希望它每次都被拉到用户的计算机/配置文件/上。该文件夹也在网络共享上。
  • 如果您的文件夹在网络上,它可以由单个用户授予访问权限,并且要访问它,您的应用程序必须在该用户登录下运行。因此,无论谁使用该登录名登录计算机,都将能够看到内容。其他人不会。除非他们是您网络中的管理员。

标签: vb.net winforms


【解决方案1】:

一种选择是使用Isolated Storage。即使用户可以打开在独立存储下物理创建的文件,也很难找到该文件(请检查以下示例中的目录是如何创建的)您还可以为创建的存储设置适当的安全策略并其他应用程序无法访问同一文件。

对于桌面应用程序,隔离存储是一种数据存储机制, 通过定义标准化的方法来提供隔离和安全 将代码与保存的数据相关联。标准化提供了其他 好处也是如此。管理员可以使用旨在操纵的工具 隔离存储配置文件存储空间,设置安全性 策略,并删除未使用的数据。使用隔离存储,您的代码没有 更长的时间需要唯一的路径来指定文件中的安全位置 系统,并且数据不受其他应用程序的保护,这些应用程序只有 隔离存储访问。指示位置的硬编码信息 应用程序所在的存储区域是不必要的。

在独立存储下创建目录和文件

C#

using (IsolatedStorageFile storage = IsolatedStorageFile.GetStore((IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly | IsolatedStorageScope.User), null, null))
{
    storage.CreateDirectory(@"SampleStorageFolder");
    storage.CreateFile(@"SampleStorageFolder\ReadMe.txt");
}

VB.NET

Imports System.IO.IsolatedStorage
    Using storage As IsolatedStorageFile = IsolatedStorageFile.GetStore((IsolatedStorageScope.Domain Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.User), Nothing, Nothing)
        storage.CreateDirectory("SampleStorageFolder")
        storage.CreateFile("SampleStorageFolder\ReadMe.txt")
    End Using

以上代码将在独立存储下创建目录和文件,

C:\Users\agarajah\AppData\Local\IsolatedStorage\f1fbq2pf.hsm\dkuvmluc.cgn\Url.q4hqkailhblwbougknr2gnmsmovpnjjc\Url.q4hqkailhblwbougknr2gnmsmovpnjjc\Files\SampleStorageFolder\ReadMe.txt

读取隔离存储下创建的文件

C#

using (IsolatedStorageFile storage = IsolatedStorageFile.GetStore((IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly | IsolatedStorageScope.User), null, null))
{
   using (StreamReader reader = new StreamReader(storage.OpenFile("ReadMe.txt", FileMode.Open)))
    {
       string content = reader.ReadToEnd();
    }
}

VB.NET

Using storage As IsolatedStorageFile = IsolatedStorageFile.GetStore((IsolatedStorageScope.Domain Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.User), Nothing, Nothing)
    Using reader As New StreamReader(storage.OpenFile("ReadMe.txt", FileMode.Open))
        Dim content As String = reader.ReadToEnd()
    End Using
End Using

注意:尝试从另一个应用程序读取相同的文件会导致 FileNotFoundException 出现错误消息“找不到文件 'ReadMe.txt'。”。

【讨论】:

    【解决方案2】:

    您可以做的第一件事是创建一个应用程序浏览到的隐藏文件夹。

    对于加密: 对于没有经验的人来说,加密文件似乎有风险。 不过,您可以对扩展进行某种程度的加密。 例如 file.docx --> file.abc

    这样你应该不能自己打开它, 然后,您可以创建一个应用程序来了解哪个“假扩展”与哪个真正的扩展进行比较。

    希望对您有所帮助!

    【讨论】:

    • 加密扩展,嗯?然后,用户点击(如果尚未完成)Show hidden files。哦,好吧...
    • 当你改变一个单词表的.docx部分时,你不能再打开它了(pc不知道用什么程序)。如果您想让您的应用以某种方式更改扩展名,以后可以给它正确的扩展名,您只能使用您的应用打开文件。
    • 这是我一段时间以来在这里听到的最愚蠢的事情。甚至很有趣!我需要做的就是打开一个记事本,在“打开”菜单中浏览到具有任何扩展名的文件,该文件将在记事本中打开其内容。通过更改扩展名,您只需将文件与其原始程序分离,因此操作系统不知道要使用哪个程序 - 它会为您提供可用程序的列表。但绝不会让您无法读取此文件。
    • 我完全同意,但它可能会实现他正在寻找的东西。一种向某人隐藏某些文件的方法,而且我认为除了亲戚之外没有人会对他的文件感兴趣,我认为对扩展名进行编码就可以了。无论如何,我今年 17 岁,是一名休闲程序员,我相信我不会很快与您的知识相匹配,因此我不会再争论了。
    • 对不起,我不是故意要伤害你或劝阻你。听起来像问的人有生产问题。对于生产问题,你不能有任何比生产方法更少的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多