gpt4 book ai didi

c++ - 如何监控包含所有子文件夹和文件的文件夹?

转载 作者:IT王子 更新时间:2023-10-29 00:12:09 24 4
gpt4 key购买 nike

我有一个名为“Datas”的文件夹。该文件夹有一个名为“收件箱”的子文件夹,其中有多个“.txt”文件。这个“Datas”文件夹可以修改,最后会有多个子文件夹,里面有“Inbox”子文件夹和“.txt”文件。我需要监控“数据”文件夹和“收件箱”文件夹中的“.txt”文件。我该怎么做?

INotify 仅监控文件夹并在创建子文件夹时弹出事件。如何在创建“.txt”文件时弹出事件(在哪个文件夹中)?

我需要 C 或 C++ 代码,但我被卡住了。我不知道如何解决这个问题。

最佳答案

来自 inotify 联机帮助页:

   IN_CREATE         File/directory created in watched directory (*).

可以通过捕捉这个事件来完成。

再次来自联机帮助页:

  Limitations and caveats
Inotify monitoring of directories is not recursive: to monitor subdirectories under a directory, additional watches must be created. This can take a significant
amount time for large directory trees.

因此,您需要自己完成递归部分。您可以从 here 中的示例开始。 .您还应该看看项目 notify-tools

评论中要求的示例:它监视 /tmp/inotify1/tmp/inotify2 创建的新文件并显示事件

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/inotify.h>

#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )

int main( int argc, char **argv )
{
int length, i = 0;
int fd;
int wd[2];
char buffer[BUF_LEN];

fd = inotify_init();

if ( fd < 0 ) {
perror( "inotify_init" );
}

wd[0] = inotify_add_watch( fd, "/tmp/inotify1", IN_CREATE);
wd[1] = inotify_add_watch (fd, "/tmp/inotify2", IN_CREATE);

while (1){
struct inotify_event *event;

length = read( fd, buffer, BUF_LEN );

if ( length < 0 ) {
perror( "read" );
}

event = ( struct inotify_event * ) &buffer[ i ];

if ( event->len ) {
if (event->wd == wd[0]) printf("%s\n", "In /tmp/inotify1: ");
else printf("%s\n", "In /tmp/inotify2: ");
if ( event->mask & IN_CREATE ) {
if ( event->mask & IN_ISDIR ) {
printf( "The directory %s was created.\n", event->name );
}
else {
printf( "The file %s was created.\n", event->name );
}
}
}
}
( void ) inotify_rm_watch( fd, wd[0] );
( void ) inotify_rm_watch( fd, wd[1]);
( void ) close( fd );

exit( 0 );
}

测试运行:

shadyabhi@archlinux ~ $ ./a.out 
In /tmp/inotify1:
The file abhijeet was created.
In /tmp/inotify2:
The file rastogi was created.
^C
shadyabhi@archlinux ~ $

关于c++ - 如何监控包含所有子文件夹和文件的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9067175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com