【发布时间】:2015-11-06 09:50:14
【问题描述】:
我正在尝试在构造函数中打开一个文件并从其他函数写入该文件,但未创建文件。
#include<iostream>
#include<fstream>
#include<cstring>
#define BAD_FILE_NAME_PATTERN "MYFILE_"
#define BAD_FILE_PATH "$HOME/"
class A
{
private:
std::ofstream m_badReprtLogFilePtr;
char *m_badReprtLogFilePtrName;
public:
void rechargeEventBadFileHandler();
void writeToFile();
A();
};
A::A()
{
time_t now = time(0);
struct tm tstruct;
char dateTime[80];
tstruct = *localtime(&now);
strftime(dateTime, sizeof(dateTime), "%F_%H%M%S", &tstruct);
m_badReprtLogFilePtrName = new char[strlen(BAD_FILE_NAME_PATTERN) + sizeof(dateTime)];
strcpy(m_badReprtLogFilePtrName,BAD_FILE_PATH);
strcat(m_badReprtLogFilePtrName,BAD_FILE_NAME_PATTERN);
strncat(m_badReprtLogFilePtrName,dateTime,sizeof(dateTime));
strcat(m_badReprtLogFilePtrName,".bad");
std::cout<< "Bad File Name " << m_badReprtLogFilePtrName << std::endl;
m_badReprtLogFilePtr.open(m_badReprtLogFilePtrName, std::ios::out | std::ios::app);
if(!m_badReprtLogFilePtr.is_open())
{
std::cout<<"Error opening Bad file"<<std::endl;
}
}
void A::writeToFile()
{
m_badReprtLogFilePtr << "Writting to BAD FILE"<<std::endl;
}
/*
A::~A()
{
m_badReprtLogFilePtr.close();
}
*/
int main()
{
A obj;
obj.writeToFile();
return 0;
}
我遇到了问题,问题出在路径上,但是如何解决这个问题
【问题讨论】:
-
里面的 C 比 C++ 多!!
-
帮我一个忙,运行一次程序,然后修改程序并在打开文件时添加以下标志。标准::ios::noreplace。文件是否在您第二次运行程序时打开?
-
$HOME等环境变量不是文件系统的一部分。除非您有一个字面上称为“$HOME”的目录,否则您需要自己扩展它(参见例如getenv)。 -
我无法重现该问题:coliru.stacked-crooked.com/a/06cc26d6e68e0eee 我的猜测:您忘记创建目录了。
-
Offtopic:您可以将此 strcpy / strcat 部分缩短为:
snprintf(m_badReprtLogFilePtrName, ..., "%s%s%s.bad", BAD_FILE_PATH, BAD_FILE_NAME_PATTERN, dateTime)
标签: c++ file-handling