我的代码是这样的:
DIR* pDir = opendir("/path/to/my/dir");
struct dirent pFile = NULL;
while ((pFile = readdir())) {
// Check if it is a .zip file
if (subrstr(pFile->d_name,".zip") {
// It is a .zip file, delete it, and the matching log file
char zipname[200];
snprintf(zipname, sizeof(zipname), "/path/to/my/dir/%s", pFile->d_name);
unlink(zipname);
char* logname = subsstr(zipname, 0, strlen(pFile->d_name)-4); // Strip of .zip
logname = appendstring(&logname, ".log"); // Append .log
unlink(logname);
}
closedir(pDir);
Run Code Online (Sandbox Code Playgroud)
(此代码未经测试,纯粹是一个例子)
关键是:是否允许在使用readdir()循环目录时删除目录中的文件?或者readdir()仍然会找到已删除的.log文件?
这个主题是关于util'ls'的BSD版本使用参数'-G'为输出着色,而Linux版本使用参数'--color'
设置颜色的环境变量也是不同的:BSD:$ LSCOLORS Linux:$ LS_COLORS
但现在的问题是:我想确定安装了哪个版本(使用一个小的Shell脚本),所以我可以在我的.bachrc文件中设置别名ls和环境.
我正在寻找一种清洁指针的正确方法.这里是示例代码:
class Parent {
protected:
int m_Var;
public:
Parent() : m_Var(0) {}
virtual ~Parent() {}
void PubFunc();
};
class Child : public Parent {
protected:
bool m_Bool;
public:
Child() : m_Bool(false) {}
virtual ~Child() {}
void ChildFunc();
};
void RemoveObj(Parent **ppObj)
{
*ppObj->PubFunc();
delete *ppObj;
ppObj = NULL;
}
int main()
{
Parent* pPObj = NULL;
Child* pCObj = NULL;
pPObj = new Parent();
pCObj = new Child();
RemoveObj(&pPObj);
RemoveObj(&pCObj); // This is line 33
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但是编译器给出了错误:
classes.cpp:33: …Run Code Online (Sandbox Code Playgroud) 让我用一个例子来说明它.
mkdir test
cd test
touch target
make target
Run Code Online (Sandbox Code Playgroud)
这将导致: make: Nothing to be done for 'target'.
所以make告诉我没有什么可做的.这是因为make没有找到规则target,但因为target已经存在的make告诉我没有什么可做的.
现在,我不希望这样.我希望make在找不到规则时给我一个错误target,即使target已经存在.
我尝试过以下方法:
echo '.DEFAULT:
echo make: *** No rule to make target `$@'. Stop.
false'> Makefile
Run Code Online (Sandbox Code Playgroud)
但是,这并不能阻止化妆使多个目标的时候.