枚举目录下的空文件并删除,如何用 C 实现?

2017-09-05 22:50:19 +08:00
 bao3

我自己在写一个程序,其中一个收尾功能实现就是在 10 个文件写完后,判断当前目录的这些文件是否为空,如果是就删除,然后程序结束。 这里面遇到两个问题:

  1. 程序在结束前,那 10 个文件一直被占用,根本没法删除
  2. 我写了删除运作,实际却不起作用。 以下我代码的片断 (完全编程小白,不要笑代码烂,东抄西凑)

删除我使用了 _unlink() , remove() 都是一样的,可是实在无力解决。

_chdir(dir);
    HANDLE hFind;
    WIN32_FIND_DATA FindData;
    hFind = FindFirstFile("./*.txt", &FindData);
    while (FindNextFile(hFind, &FindData))
    {
        FILE *Emptyfp;
        char ch[40];
        strcpy(ch, FindData.cFileName);
        if ((Emptyfp = fopen(FindData.cFileName, "r")) == NULL)
        {
            printf("未生成 ioLogik 文件!\n");
            exit(0);
        }
        //ch = fgetc(Emptyfp);
        //if (feof(Emptyfp) == 0)
        //{
            //printf("%s 文件为空\n",FindData.cFileName);
            printf("%s\n",ch);
            _unlink(ch);
        //}
       
    }
 
    // Close the file handle
 
    FindClose(hFind);
2169 次点击
所在节点    C
11 条回复
tghgffdgd
2017-09-05 23:04:07 +08:00
打开了不关闭当然就是被占用
goodspb
2017-09-05 23:09:18 +08:00
删除应该用路径就可以,不需要文件描述符…
bao3
2017-09-05 23:09:36 +08:00
@tghgffdgd 感谢,已经使用 fileclose() 关闭,确实可以删除。可是上面的循环,总是会剩下一个文件不删除,即便是空的。这个要怎么解决。
bao3
2017-09-05 23:12:01 +08:00
@goodspb 是我只打开,没关闭,所以才会删除不掉。
KeepPro
2017-09-05 23:44:13 +08:00
剩下的那个文件是第一个 findFirstFile 找到的那个吧。
tghgffdgd
2017-09-06 00:00:44 +08:00
@bao3 第一个找到的文件不在你的循环里
bao3
2017-09-06 00:26:40 +08:00
@KeepPro 确实是第一个文件删除不掉。。。。可是我应该怎么修改?循环直接从 nextFile 开始了。
alqaz
2017-09-06 01:10:40 +08:00
介意用 c++吗?
catror
2017-09-06 01:42:21 +08:00
写成 do while,不然第一个删不掉
ysc3839
2017-09-06 04:30:17 +08:00
bao3
2017-09-06 06:02:22 +08:00
@catror 谢谢,原来可以这样实现。已经解决了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388448

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX