2011-06-20 151 views
0

我的程序已运行正常一年多。今天,我将这些文件复制到不同的系统上并编译了每个程序。无法写入文件

当我编译并从Dev-C++运行时,它将数据写入文本文件,但是当它点击它创建的可执行文件时,它不会将数据写入文件。像输入/输出一样的其他东西似乎工作。

我错过了什么程序?

好吧,我已经给了程序完全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()错误()消息:没有这样的文件或目录

如何我现在设置目录吗?

+1

用户权限替换open("?你在运行什么操作系统? – Joe

+0

魔法部分?对不起,忍不住用你的用户名...;) – Nim

+1

任何错误信息? –

回答

0

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

+0

你是对的。刚刚检查过system32和所有的.txt文件都坐在那里。现在我该如何改变它? – Asterix

+0

给出了输出文件的完整路径,而不仅仅是文件名。 –

+0

不幸的是,在50个C++文件中,每个文件都有20多个文本文件,我不得不改变它的工作方式。我还可以做些什么 ? – Asterix

1

我还没有雷蒙德的心理调试权力,但我知道一个工具,可以帮助你:Process Monitor。用它来精确地查看应用程序试图写入哪些文件,以及它失败的原因。

+0

心灵调试权力? – YXD

+2

@Mr E:http://www.google.com/search?hl=en&q=raymond+chen+psychic+debugging –

2

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

+0

好吧,我用了getcwd(),它告诉我没有这样的文件或工作目录。我如何使它合适。 – Asterix

+0

不,你用chdir(“/ tmp”),它告诉你/ tmp不存在。如果你在Windows系统上运行,你需要chdir(“c:\\ tmp”),假设c:\ tmp确实存在。 – damian

1

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

+0

我如何找到当前工作目录? – Asterix

+0

检查达米安答案 – Dikei

0

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

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

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

+0

财产的开始设置正确不幸。 – Asterix

+0

@Asterix,那么我必须得出结论,你没有适当的权限写入目录。 Windows 7在可以创建文件的地方添加了许多限制。 –

0

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

另外,如果您的所有文件在同一目录中,那么你可以使用find &替换,并与open("c:\\your_directory_here\