c++语言本身是不能删除文件或文件夹的,他们是windows操作系统里的东西,所以得借助其api函数。
其一:使用shell 接口:
void FileDelete(CString directory)
{
SHFILEOPSTRUCT shFileOp;
char strCurrentPath[MAX_PATH];
memset(&shFileOp,0,sizeof(shFileOp));
GetCurrentDirectory(MAX_PATH,strCurrentPath);
strcat_s(strCurrentPath,sizeof(strCurrentPath),directory);
strCurrentPath[strlen(strCurrentPath)+1] = 0;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = strCurrentPath;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
SHFileOperation(&shFileOp);
}
使用该函数你得 #include
其二: 使用MFC的CFileFind递归遍历文件并删除文件和文件夹
bool DeleteDirectory(char* strDirName)
{
CFileFind tempFind;
char strTempFileFind[MAX_PATH];
sprintf(strTempFileFind,"%s//*.*", strDirName);
BOOL IsFinded = tempFind.FindFile(strTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char strFoundFileName[MAX_PATH];
strcpy(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));
if (tempFind.IsDirectory())
{
char strTempDir[MAX_PATH];
sprintf(strTempDir,"%s//%s", strDirName, strFoundFileName);
DeleteDirectory(strTempDir);
}
else
{
char strTempFileName[MAX_PATH];
sprintf(strTempFileName,"%s//%s", strDirName, strFoundFileName);
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(strDirName))
{
return FALSE;
}
return TRUE;
}
1) 打开原文件,oldfile
2)创建新文件,newfile
3)从oldfile中读入一个学生情况,如果学号为1则直接读入下一个文件,否则把信息写入到newfile;
4)直到写完。
5)关闭oldfile,newfile
6)删除oldfile
7)改名newfile 到原文件名。
找到待删除部分的起始和结束位置(A, B位)
用fseek函数把写指针移动到A 读指针不变
把B以后的数据copy到A后
读完后在写指针后面加上EOF
想法而已,还没有实现……
也不知道能不能实现,操作系统没仔细看过,不知道可不可以同时读写……
好吧,我承认我异想天开了……
从文件中读出10个学生信息,存储到相应数组里,在数组里删除1号学生信息,把剩下的信息重新写入文件。(附加一句,LS的方法实现不了)
先从文件里读出数据,然后找到学号为1号的学生,删除这些相关的字段,然后从新写入文件中