无法写入文件

时间:2011-06-20 17:17:47

标签: c++

我的程序运行正常一年多了。今天我将文件复制到另一个系统并编译每个程序。

当我从Dev-c ++编译并运行时,它将数据写入文本文件,就像它应该的那样,但当我点击它创建的可执行文件时,它不会将数据写入文件。其他一些像输入/输出似乎都有用。

我错过了什么程序?

好的,我已经给了程序Full permision但它仍然没有写。

我很困惑,至少如果它在C ++环境下编译时没有运行我可以继续检查我的代码,但只有.exe不起作用,还有其他任何建议吗?

 #include <iostream> 
 #include <fstream>
 using namespace std; 
 int main() {  
 ofstream bss2; 
 bss2.open("expat.txt",ios::app);
 bss2 << 2 ; 
 bss2.close();
 } 

这是我测试过的示例代码。

如何找到当前工作目录?

好的我换了一行

bss2.open("c:\\expat2.txt",ios::app);

现在它在exe文件中正常工作。

但是有超过50个文件,我更喜欢我没有拼出每个文件的新路径,有什么办法可以将目录设置为以前使用的目录?

更新4:

 #define _POSIX_SOURCE
 #include <unistd.h>
 #undef _POSIX_SOURCE
 #include <stdio.h>

 main() {
   char cwd[256];
   int y;
   if (chdir("/tmp") != 0)
     perror("chdir() error()");
   else {
     if (getcwd(cwd, sizeof(cwd)) == NULL)
       perror("getcwd() error");
     else
       printf("current working directory is: %s\n", cwd);
   }
   scanf(y);
 }

好的,我使用了getcwd(),这是它给我的消息

chdir()error():没有这样的文件或目录

如何立即设置目录。

6 个答案:

答案 0 :(得分:2)

当您双击该文件时,听起来您的工作目录未正确设置。如果您可以访问日志,请使用getcwd()并记录它返回的内容。

答案 1 :(得分:1)

我还没有Raymond Chen的心灵调试能力,但我知道一种可以帮助你的工具:Process Monitor。使用它可以准确地查看应用程序尝试写入哪些文件,以及它失败的原因。

答案 2 :(得分:1)

也许你看错了位置。程序会将文件写入当前工作目录,当您双击可执行文件并从Dev-C ++运行时,该文件可能会有所不同。

答案 3 :(得分:0)

正如其他人所说,工作目录可能不正确。

如果创建.exe的快捷方式,则可以在快捷方式属性中设置工作目录。右键单击快捷方式,选择“属性”,然后更改“开始”属性。

当然,更好的答案是在打开文件时将文件的完整路径放入文件名字符串中。

答案 4 :(得分:0)

最好和最简单的方法是提供输出文件的完整路径,而不仅仅是文件名。这样,您可以确定文件的位置,而不必在任何地方搜索它。如果您使用的是Windows,则输出文件可能位于system32中的某个位置。但我可能是错的。

答案 5 :(得分:0)

可能是Windows使用反斜杠,因此请尝试“\ tmp”而不是“/ tmp”。

此外,如果您的所有文件都在同一目录中,那么您可以使用find&amp;用open("

替换并替换open("c:\\your_directory_here\