【问题标题】:File output on a target computer目标计算机上的文件输出
【发布时间】:2012-04-24 14:42:00
【问题描述】:

我有一个使用以下内容的 Windows 窗体应用程序

ofstream myfile;
myfile.open("foo.csv");
myfile << "whatever";
myfile.close()

文件在我的计算机上输出到应用程序所在的同一目录中(编译后自动释放文件夹)。但是,如果我将应用程序移动到计算机上的另一个位置,或者使用 Windows 设置文件分发它时,我无法将文件输出到目标计算机。有谁知道怎么做?

【问题讨论】:

  • 检查是否my_file.is_open()。可能是正在运行进程的目录中存在权限问题。
  • 当我这样做时;该文件在默认目录中打开,但是当我将应用程序移动到另一个位置时,该文件未打开。如何更改权限问题?
  • 你可能做不到。您可以尝试在临时目录或用户特定目录中创建文件吗?
  • 请参阅stackoverflow.com/questions/9706084/… 以了解如何使用SHGetFolderPath

标签: visual-c++ file-io


【解决方案1】:

它应该可以在任何计算机上正常工作。

两个可能的原因:

1) 发生错误导致无法写入文件,或

2) 文件没有写入您期望的位置

一定要检查错误。例如:

std::ofstream outFile("foo.csv");
if (!outFile)
{
   // Open failed - take error handling action.
}

ADDENDUM:这会打印错误消息:

std::ofstream outFile("foo.csv");
if (!outFile)
{
   // Open failed - take error handling action.
   cout << "error reading file foo.csv" << " error: " << strerror(errno) << endl;
}

【讨论】:

  • 我搜索了该文件,但该文件不在计算机上的任何其他位置。所以它一定是一个正在发生的错误。如何查看错误是什么/如何处理?
  • 通过检查空流(“if !outFile”),您会看到 if 发生错误。我已经用 strerror() 更新了代码 sn-p,它会打印出确切的错误。如果错误是“权限”,那么您需要 1) 允许对您的目录进行写访问,或者 2) 写入不同的目录;)
  • 问:你想在哪里写这个文件?在 c:\Program 文件下?这不适用于 Vista 或 Win7,除非您“以管理员身份运行”:answers.microsoft.com/en-us/windows/forum/…answers.microsoft.com/en-us/windows/forum/windows_7-security/…
  • 太棒了!那行得通!有什么办法可以让用户不必单击“以管理员身份运行”?还是我必须将文件设置为安装在不同的目录中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多