Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何写入应用程序内部的文本文件_Vb.net_Resources_Text Files_Overwrite - Fatal编程技术网

Vb.net 如何写入应用程序内部的文本文件

Vb.net 如何写入应用程序内部的文本文件,vb.net,resources,text-files,overwrite,Vb.net,Resources,Text Files,Overwrite,基本上,我的应用程序中有一个文本文件(在应用程序属性的resources选项卡中) 现在我试着读写那个文件,读的效果很好,写的部分给我带来了问题 我正在使用dim str作为string=my.resources.textfile,这很有效 现在我尝试使用my.resources.textfile=str2,这会给我一个错误,说明该文件是只读的 我如何解决这个问题 注意:我不喜欢将文件写入用户的PC,因为需要写入的数据不多,而且它看起来有点不专业(在我看来),所以我更喜欢不将文件写入用户PC的方

基本上,我的应用程序中有一个文本文件(在应用程序属性的resources选项卡中)

现在我试着读写那个文件,读的效果很好,写的部分给我带来了问题

我正在使用dim str作为string=my.resources.textfile,这很有效

现在我尝试使用
my.resources.textfile=str2
,这会给我一个错误,说明该文件是只读的

我如何解决这个问题

注意:我不喜欢将文件写入用户的PC,因为需要写入的数据不多,而且它看起来有点不专业(在我看来),所以我更喜欢不将文件写入用户PC的方式

当它只是一个包含一行文本的小文本文件时,将其写入另一个文件是一种浪费

为什么这是一种“浪费”?这是一种奇怪的看法。如果一开始写这个文件是值得的,那么把它写到一个单独的文件也是值得的

正如Jacob在评论中所说,修改可执行文件本身是一项非常重要的任务。让代码工作以实现这一点将是真正的浪费。这假设您可以通过病毒扫描程序、公司政策或基本代码审查获得这样的代码

我不喜欢将文件写入用户的PC,因为需要写入的数据不多,而且看起来有点不专业(在我看来),所以我更喜欢不将文件写入用户PC的方式

你担心这件事的本能是正确的,但在这个特殊的情况下,这种担心是错误的。将文件写入用户的桌面、文档文件夹,甚至硬盘的根级别,确实是不专业的。这些位置可能只属于用户或系统,即使您可以成功地写入它们(UAC将在磁盘的根级别上与您进行一路斗争),您也不应该这样做。()

相反,请使用专门用于此目的的应用程序数据文件夹。您保证对此位置具有读/写权限,并且没有任何普通用户查看过该位置,因此他们不会看到您扔进去的任何东西。不正常的用户在那里看到的是存储在那里的这种东西

你唯一可能犯的错误就是对这样一个文件夹的路径进行硬编码。不要这样做,因为它会将位置从一台机器更改到下一台机器。相反,请使用该方法检索其位置。该函数接受其中一个值,其中有一个疯狂的数字。为此,您感兴趣的三个方面是:

  • ApplicationData
    ,用于存储应随用户帐户漫游的应用程序数据(即,当用户使用其他计算机登录时随帐户漫游)
  • LocalApplicationData
    ,用于存储不应随用户帐户漫游的应用程序数据(即,仅在当前计算机上停留在本地)
  • CommonApplicationData
    ,用于存储所有用户通用的应用程序数据(即非用户特定的数据)

如果只是登录凭据,为什么不使用My.Settings?获取您的项目属性,然后在“设置”选项卡中添加您的设置,例如“用户名”等,并使用类似的设置:My.settings.username=“Yorrick”
My.settings.save

这不太可能(当然可能),而且即使您可以轻松地将文件存储在可执行文件中,您仍然会写入用户磁盘并占用空间。应用程序在磁盘上存储数据并不是不专业的。这一点很好,但当它只是一个包含一行文本的小文本文件时,将其写入另一个文件是一种浪费。它基本上只是一行包含需要保存的登录凭据的文本。您已经考虑过这个问题了。我可以从您使用vb.net的事实看出,您运行的系统并不是如此受限,以至于在文件中写入一行将是一个负担——请记住,写入可执行文件的解决方案本身将占用代码中的空间!非常正确。但是我必须问,为什么VB.net没有被充分利用?你可以用vb和(大多数)其他语言做几乎相同的事情&它比使用/学习容易100倍。我不同意它比学习容易100倍,但这个讨论不适合StackOverflow。你在那里提出了一些很好的论点,我不能说我不同意你。虽然没有将文件写入%appdata%,但我只是使用了
System.IO.Directory.CreateDirectory(Mid(My.Application.Info.DirectoryPath,1,1)和“:\ProgramData\DayZadAdminPanel”)
&然后在那里创建了文件。虽然现在我似乎被卡住了,但不断收到一个异常,说我无法写入该文件,因为它已被另一个进程使用…@Yorrick你不能仅仅假设存在这样的随机路径。可能没有
ProgramData
目录。您仍然在硬编码路径,即使您没有硬编码驱动器号。我不确定用正确的方法做这件事有什么不对。它不会产生任何异常。除非我大错特错,否则ProgramData现在不是Windows的默认文件夹吗?你是对的,用正确的方式做没有错,我想我只是有时候有点固执,这是我的许多缺点之一。@Yorrick当然是——在Windows 7上。不过,微软可以随时对此进行更改。回想一下,Windows XP做的事情完全不同,没有ProgramData文件夹。我不认为它们将名称ProgramData本地化,但是它们可能,你永远不知道。当有一种简单的、有文档记录的方法来检索正确的路径时,我不认为做这些假设有什么意义。