基本上,我的应用程序内部有一个文本文件(在应用程序属性的资源选项卡中)。
现在我正在尝试阅读&写到那个文件,阅读工作得很好,这是给我提问的写作部分。
我正在使用dim str as string = my.resources.textfile
,这有效。
现在我正在尝试使用my.resources.textfile = str2
,这会给我一个错误,指出该文件是只读的。
我该如何解决这个问题?
注意:我不喜欢将文件写入用户的PC,因为它不是需要编写的大量数据,因为它看起来有点不专业(在我看来),所以我更喜欢这样做的方法无需将文件写入用户的PC。
答案 0 :(得分:3)
当它只是一个包含1行文本的小文本文件时,将其写入不同的文件是一种浪费。
为什么这会是“浪费”?这是一种看待它的奇怪方式。如果首先编写文件是值得的,那么将其写入单独的文件是值得的。
像雅各布在评论中所说,修改可执行文件本身是一项非常重要的任务。让代码工作以实现这一目标将是真正的浪费。这假设您可以通过病毒扫描程序,公司策略或基本代码审查获得类似的代码。我不喜欢将文件写入用户的PC,因为它不是需要编写的大量数据,因为它看起来有点不专业(在我看来),所以我更喜欢这样做而无需写一个文件到用户的PC。
你有正确的直觉担心这一点,但在这种特殊情况下的担忧是错误的。将文件写入用户的桌面,文档文件夹,甚至是硬盘的根级别确实是不专业的。这些位置要么专属于用户或系统,即使您可以成功写入它们(UAC将在磁盘的根级别上一直对战),您也不应该这样做。 <子>(Blah blah blah, I've ranted about this before.)子>
而是使用专门用于此目的的Application Data文件夹。您可以保证对此位置具有读/写权限,并且没有普通用户在那里查看,因此他们不会看到您投入的任何内容。看到期望的异常用户看到这种东西存放在那里。
你唯一可能犯的错误就是硬编码这样一个文件夹的路径。不要这样做 - 它会将位置从一台机器更改为下一台机器。而是使用Environment.GetFolderPath
方法检索其位置。该函数采用其中一个Environment.SpecialFolder
值,其中有一个疯狂的数字。你为此目的感兴趣的三个是:
ApplicationData
,用于存储应该使用用户帐户漫游的应用程序数据(即,当他们使用其他计算机登录时使用该帐户)LocalApplicationData
,用于存储不使用用户帐户漫游的应用程序数据(即仅在当前计算机上保留在本地)CommonApplicationData
,用于存储所有用户共有的应用程序数据(即非用户特定的)。答案 1 :(得分:0)
如果它只是登录凭据,为什么不使用My.Settings?获得项目属性,然后到设置选项卡,添加您的设置例如。 “用户名”等并使用如下:My.Settings.username =“Yorrick” My.settings.save