2011-11-16 74 views
0

我试图使用ofstream(C++ Builder)将文本文件保存到特定目录。我有问题,与Windows 7将“.txt”保存到使用Windows XP和7的特定目录

// Works fine at Windows XP and Windows 7 
std::ofstream file1("Name.txt"); 

// Works fine at Windows XP but not at Windows 7 
std::ofstream file1("Folder1/Name.txt"); 

// Works fine at Windows XP but not at Windows 7 
std::ofstream file1("Folder1\\Name.txt"); 

我如何可以节省名为“.txt”文件,使用Windows 7特定的目录?

OBS:当我保存使用Windows 7的程序,该文件被保存在:

C:\ Users \用户名\ AppData的\本地\ VirtualStore \ Folder1中\ Name.txt

+0

您是否尝试过运行“作为管理员”的应用程序,也许这是一个权限问题。 – shenles

+2

@shenles:以管理员身份运行应用程序是绝对错误的**建议。它违反了自Windows Vista发布以来所做的每一次更新的安全限制和改进,并且仅仅是糟糕的编程习惯,除非您有特定的原因这样做。这相当于在* nix系统上以'root'运行所有进程。 –

+0

我完全同意,但它会很快诊断问题是与权限,而不是与代码如何尝试创建文件 – shenles

回答

4

首先,停止使用相对路径,因为它们是相对于调用进程的当前工作目录而言的,它在进程的生命周期中动态地改变。请始终使用绝对路径。使用反斜杠而不是正斜杠,并确保只有在字符串逃跑反斜杠,如:

std::ofstream file1("C:\\Folder1\\Name.txt"); 

第二,确保运行你的应用程序的用户帐户具有安全权限访问该文件夹,并写入文件。 Vista和更高版本比XP更严格,特别是如果启用UAC。许多文件夹是只读的,特别是如果您的应用程序安装在“Program Files”文件夹下。切勿写入程序的安装文件夹或其子文件夹。使用Windows设置的特殊文件夹来处理与用户相关的应用程序相关的文件。

+0

我不会说总是使用绝对路径。通常,用户可以将应用程序解压缩/安装到任何目录中,因此您可以使用相对路径来查找相对于exe工作目录的文件。 – shenles

+0

?你说要始终使用正斜杠,然后为了说明你的观点,你举了一个例子,用反斜杠代替? –

+0

@JoeWhite:我弄懂了术语,但你知道我的意思。在文字中使用“\”(“\\”)而不是“/”作为路径分隔符。 –

相关问题