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不会提供检查文件是否打开的功能。它只会通知特定位置的文件更改。那不是我的问题。