QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 720|回复: 4

有关文件操作

[复制链接]
发表于 2005-2-1 15:13:14 | 显示全部楼层 |阅读模式
如果在C里先用open()打开了一个文件,然后我们在外面手工删掉此文件,
程序继续用write() 写BUF到打开的文件句柄,但是文件已被删除,而write()的动作和成功一样,从写入的字节数和errno判断都是正常。
有谁知道如何判断文件已被删除了?
我测试过:fstat() / stat() / select() 来判断是不是文件被删除了,但是都不能如意。
大家还有没有更好的方法
发表于 2005-2-1 18:22:59 | 显示全部楼层

Re: 有关文件操作

[quote:1f82ad1138="sdemon915"]如果在C里先用open()打开了一个文件,然后我们在外面手工删掉此文件,
程序继续用write() 写BUF到打开的文件句柄,但是文件已被删除,而write()的动作和成功一样,从写入的字节数和errno判断都是正常。
有谁知道如何判断文件已被删除了?
我测试过:fstat() / stat() / select() 来判断是不是文件被删除了,但是都不能如意。
大家还有没有更好的方法[/quote]

close完了再尝试重新打开。
回复

使用道具 举报

发表于 2005-2-2 09:24:05 | 显示全部楼层
可以用access(文件名(不再当前目录则要全路径),mode(R_OK 读权限| W_OK 写权限| X_OK 执行权限| F_OK文件是否存在))函数来判断.同意楼上的说法,毕竟你已经用open成功打开了以前存在的文件,那么在接下来的程序就按照open的返回值执行,这各时候你再判断文件是否存在五意义.
回复

使用道具 举报

 楼主| 发表于 2005-2-2 17:46:12 | 显示全部楼层
现在的问题是:用open打开了一个文件,然后手工删除了它,又再同一个地方重新建立了一个名称相同的文件,这时写文件的时候有没有办法可以区别这个新建的文件(虽然名称相同)和原来的那个不同?
回复

使用道具 举报

发表于 2005-2-3 16:01:43 | 显示全部楼层
当然啊,打开第一个文件时返回的文件描述符没变啊,程序就开始写,执行过程当中不可能再去判断此文件吧,除非你在写之前再判断一次其是否存在,否则你说的情况时不可能的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 16:33 , Processed in 0.064337 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表