无法写入文件

Not able to write to a file

本文关键字:文件      更新时间:2023-10-16

我的程序已经正常运行了一年多。今天,我把这些文件复制到另一个系统上,并编译了每个程序。

当我从Dev-c++编译和运行时,它会像预期的那样将数据写入文本文件,但当我点击它创建的可执行文件时,它不会将数据写入文件。其他一切,比如输入/输出,似乎都起作用了。

我错过了什么程序?

好的,我已经给了这个程序完全许可,但它仍然不写。

我很困惑,至少如果我在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: %sn", cwd);
   }
   scanf(y);
 }

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

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

我现在该如何设置目录。

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

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

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

最好、最简单的方法是给出输出文件的完整路径,而不仅仅是文件名。这样,您就可以确定文件的位置,而不必到处搜索。如果使用的是Windows,则输出文件可能位于system32中的某个位置。但我可能错了。

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

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

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

可能是Windows使用了反斜杠,所以请尝试使用"\tmp"而不是"/tmp"。

此外,如果所有文件都在同一目录中,则可以使用find&用open("c:\your_directory_here 替换open("