Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否在其他应用程序中打开了文件?_C++_Objective C_C_Xcode_Cocoa - Fatal编程技术网

C++ 是否在其他应用程序中打开了文件?

C++ 是否在其他应用程序中打开了文件?,c++,objective-c,c,xcode,cocoa,C++,Objective C,C,Xcode,Cocoa,有没有办法告诉我某个文件是否在另一个应用程序中打开 在我的应用程序中打开文件之前,我想提供一个功能,我想知道文件是否已经打开 我想把功能,如果它已经在另一个应用程序中打开,然后我的应用程序限制文件再次打开,以保存信息的丢失 提前感谢…这类任务有文件锁定: 此类任务存在文件锁定: 在Linux上,可以使用lsof查看文件是否打开 在Linux上,可以使用lsof查看文件是否打开 到现在为止,您一定已经实现了一些解决方案,但根据我对您的设计的理解,我建议您不要使用它 在允许用户保存文件之前,您应该允

有没有办法告诉我某个文件是否在另一个应用程序中打开

在我的应用程序中打开文件之前,我想提供一个功能,我想知道文件是否已经打开

我想把功能,如果它已经在另一个应用程序中打开,然后我的应用程序限制文件再次打开,以保存信息的丢失


提前感谢…

这类任务有文件锁定:


此类任务存在文件锁定:


在Linux上,可以使用lsof查看文件是否打开


在Linux上,可以使用lsof查看文件是否打开


到现在为止,您一定已经实现了一些解决方案,但根据我对您的设计的理解,我建议您不要使用它

在允许用户保存文件之前,您应该允许用户打开文件并检查时间戳,以确定其是否已被修改。可能会询问用户是否覆盖文件或将其另存为新文件等

看看API

-在打开文件之前,记下时间戳st_mtime,请参见下面的结构

-允许用户修改该文件

-在用户保存文件之前,请再次检查文件的时间戳,如果时间戳不同,请向用户提问

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

到现在为止,您一定已经实现了一些解决方案,但根据我对您的设计的理解,我建议您不要使用它

在允许用户保存文件之前,您应该允许用户打开文件并检查时间戳,以确定其是否已被修改。可能会询问用户是否覆盖文件或将其另存为新文件等

看看API

-在打开文件之前,记下时间戳st_mtime,请参见下面的结构

-允许用户修改该文件

-在用户保存文件之前,请再次检查文件的时间戳,如果时间戳不同,请向用户提问

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

适应新环境?祝你好运:/Rasel:我读过关于文件处理的文章,但它不支持这种类型的测试。哦。。。编写多语言源文件很难。我建议您只选择C++中的1个,Objul-C,C,XCODEL,或者COCOA作为您的项目。您可以给我任何语言的解决方案。我可以在我的应用程序中使用所有这些。您可以根据上面建议的lsof执行某些操作,但您需要超级用户访问,如果其他应用程序在您的应用程序打开文件后打开该文件,该怎么办?从?祝你好运:/Rasel:我读过关于文件处理的文章,但它不支持这种类型的测试。哦。。。编写多语言源文件很难。我建议您只选择C++中的1个,Objul-C,C,XCODEL,或者COCOA作为您的项目。您可以给我任何语言的解决方案。我可以在我的应用程序中使用所有这些。您可以根据上面建议的lsof执行某些操作,但您需要超级用户访问,如果其他应用程序在您的应用程序打开文件后打开该文件,该怎么办?谢谢您的回答,但在我的情况下,该文件正由任何其他应用程序打开,我将对该文件进行锁定。嗯,此类信息高度依赖于系统,仅通过调试和统计接口可用。我认为你不应该搞砸它。您可以使用kqueue接口监视文件的更改:非常感谢,但是kqueue不会提供检查文件是否打开的功能。它只会通知特定位置的文件更改。这不是我的问题。谢谢您的回答,但在我的情况下,该文件正在被任何其他应用程序打开,我将对该文件进行锁定。嗯,此类信息高度依赖于系统,只能通过调试和统计接口使用。我认为你不应该搞砸它。您可以使用kqueue接口监视文件的更改:非常感谢,但是kqueue不会提供检查文件是否打开的功能。它只会通知特定位置的文件更改。那不是我的问题。