【问题标题】:How can I include saving in a text file in executable file?如何在可执行文件中包含保存在文本文件中?
【发布时间】:2012-12-10 20:45:53
【问题描述】:

我在 Visual Studio C# 中有一个应用程序,其中包括保存到文本文件中,我怎样才能将 .exe 发送到另一台计算机并且保存时不会出现异常?

我需要通过电子邮件发送一个 .exe 文件(是的,可以),这个应用程序包括保存游戏状态。请问如何发送这个 .exe 文件让用户能够保存在他的电脑中?

问题是当我在另一台计算机上发送我的应用程序的可执行文件时,我在保存时遇到异常。因为在另一台电脑上我没有保存游戏的文本文件。

我在这里保存:

StreamWriter myFile = File.CreateText(Directory.GetCurrentDirectory()+"//ConnectFour.txt");

在项目的obj/Debug/中..

感谢您的帮助:)

【问题讨论】:

  • 保存到文本文件有据可查。你具体有什么问题?请发布您到目前为止的代码。
  • 请发布您收到的确切异常消息。您没有跟踪/显示异常 - 从那开始。
  • 我不知道有什么异常..我只是捕捉一般的异常类..并显示一个带有“无法保存到文件”消息的消息框,因为我没有另一台计算机上的代码我不知道捕获了什么异常:/

标签: c# executable


【解决方案1】:

发送可执行文件应该可以正常工作。

确保另一台计算机安装了适当的 Microsoft .NET Framework。

最新的框架安装程序:MSDN

另外,请确保您保存文件的路径存在于远程计算机上。例如,如果您尝试保存到 D:\ 驱动器但它不存在。你会得到一个例外。

【讨论】:

  • 我将文件保存在项目的 obj/Debug 目录中。我只发送 .exe 文件。所以这是错误的吗?因为我的项目目录在另一台计算机中不存在:/
【解决方案2】:

当前用户很可能无法写入当前位置。

使用“当前目录”是危险的,因为您无法控制应用程序的启动位置。它对于命令行实用程序非常有用,但对于常规的窗口应用程序则没有那么多。使用您知道可以将文件保存到的位置 - 即“我的文档”。

var filePath = Path.Combine(
   Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\",
   ConnectFour.txt");
using(var  myFile = File.CreateText(filePAth))
{
  // save data here.
}

【讨论】:

  • 谢谢阿列克谢,它就像你说的那样工作!感谢您,我现在可以在另一台计算机上保存:D
  • 在我检查了多台计算机之后,这在某些计算机上有效,而在其他计算机上无效:/ 我认为这是因为其他计算机安装了 .NET Framework。但是我希望我知道如何解决这个问题
【解决方案3】:

通过电子邮件发送可执行文件时的问题是防病毒扫描程序。他们中的一些人拒绝包含可执行文件的电子邮件。其他人接受邮件但删除附件。

解决方案在于隐藏可执行文件。这可以通过压缩可执行文件并发送压缩文件来完成。

通常这足以解决问题,但一些防病毒扫描程序非常聪明,甚至可以识别 zip 附件中的可执行文件。这里的解决方案是使用密码加密 zip 文件。我经常只使用密码“pwd”并在电子邮件文本中提及它。防病毒软件(还)不够聪明,无法理解这段文字。


更新

现在我明白你的问题了。它与发送可执行文件无关。

应用程序可以像这样确定它是从哪个目录启动的

string dir = System.IO.Path.GetDirectoryName(
    System.Windows.Forms.Application.ExecutablePath
);

另一种选择是(如果您没有对 WinForms 的引用):

string dir = System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetEntryAssembly().Location
);

【讨论】:

  • 问题不在于发送.exe文件。我设法发送它并且它被另一端接收。问题是我不知道我是否将文本文件保存在正确的目录中以供其他计算机访问
  • 我不明白通过电子邮件发送文件时如何保存文件。
  • 我正在创建一个这样的文件: StreamWriter myFile = File.CreateText(Directory.GetCurrentDirectory()+"//ConnectFour.txt");您认为它会在另一台计算机上正在运行的应用程序的当前目录中创建吗?还是我必须使用其他东西?
  • 我添加了一个获取可执行文件目录的解决方案。请注意,GetCurrentDirectory 可以是最近访问过的任何目录。它不一定是您的应用程序的启动位置。
  • 我也发现了这个: var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\ConnectFour.txt"); ..它在一个朋友的电脑上工作正常,但在另一台电脑上却不行。你认为这是受接收器安装的.NET Framework的影响吗?如果是,您知道如何使我的程序对 .NET Framework 不可靠吗?
【解决方案4】:

您可能没有足够的权限将文件保存在远程计算机上。如果您向我们提供有关正在引发的确切异常的更多信息(异常类型、消息、堆栈跟踪等),您将得到更准确的答案。

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 2018-12-28
    • 2016-12-12
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多