问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何判断写文件结束?

发布网友 发布时间:2023-06-26 17:09

我来回答

6个回答

热心网友 时间:2024-11-05 19:06

这个问题太好解决了,有几种方法

方法1,使用windows.h里的全局共享Mutex
如果是在windows里面可以用创建Mutex的方法
即,第一个发送进程开始时就建立一个Mutex
然后开始写文件,写完文件然后删除掉Mutex.

第二个进程一直创建一个和第一个进程相同的Mutex,由于是同名,肯定是创建失败。如果失败继续尝试并等待直到第一个进程删除Mutex,则二号进程创建成功,就可以打开文件并发送了.

方法2 更简单,加一个标志文件S,即第一个进程开始读文件读完文件后,创建一个特别的文件叫"c:\sign.txt".只要创建即可,不用写任何东西.

进程二,一直尝试打开"c:\sign.txt"由于文件不存在,则必定打开失败.直到进程一完成工作,创建了 c:\sign.txt
.进程二才能打开成功,则意味着进程二可以发送文件了.
我的例子是用C++ 标准流fstream写的.你也可以用c的
File 一样来完成

方法1代码:
进程1
#incle <windows.h>
int main()
{
HANDLE m_Mutex=CreateMutex(NULL, FALSE, "is_ok");

//写文件..... 你的代码

CloseHandle(m_Mutex);//删除Mutex is_ok;
return 0;
}

进程2
#incle<windows.h>
int main()
{
do {
HANDLE m_Mutex=CreateMutex(NULL, FALSE, "is_ok");
Sleep (5000); //每5秒检测一次
}while(GetLastError() == ERROR_ALREADY_EXISTS);
CloseHandle(m_Mutex);
//如果程序能执行到这里,代表进程一已经写完文件了
//进程二,你的代码写在这里.
return 0;
}

热心网友 时间:2024-11-05 19:07

写文件结束符由文件关闭函数建立。
例如 fclose(fout).
不必另写。

读文件结束符可以用
int feof ( FILE * stream );
标准函数判断。

两进程问题,如果写进程未关闭文件,写文件部分必须用
int fflush ( FILE * stream );
这种函数释放缓冲区,保证数据真正写出去了,并发送消息到读进程,让读进程读。不通过EOF检测。

热心网友 时间:2024-11-05 19:07

判断文件是否写结束
只要判断它是否被打开就可以了

判断文件是否被打开的函数:

bool IsFileInUse(String FileName)
{
bool Result;
HANDLE Handle = CreateFile(FileName.c_str(), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Result = INVALID_HANDLE_VALUE == Handle;
if (!Result)
CloseHandle(Handle);
return Result;
}

热心网友 时间:2024-11-05 19:08

写文件的进程在打开文件输出的时候使用WINDOWS的API接口:CreateFile,其第三个参数dwShareMode设置为NULL,就是不允许共享访问.然后第二个进程在准备发送文件时首先以读文件的方式调用CreateFile接口也以独占方式打开文件.此时如果第二个进程打开文件失败,CreateFile失败后用GetLastError得到的错误为32号则表示第一个进程还在写文件(文件没写完).以下是简单的检查代码,你可以借鉴:

void CFile1Dlg::OnOK()
{
HANDLE hFile=INVALID_HANDLE_VALUE;
HANDLE hFile2=INVALID_HANDLE_VALUE;
DWORD dwErrorNum;//保存错误代码
char * lpMsgBuf=NULL;//保存错误信息

hFile=CreateFile( "c:\\aa.txt",//文件名称
GENERIC_WRITE|GENERIC_READ,//读写权限
NULL,//不允许共享使用该文件
NULL,//不设置文件的安全属性
CREATE_ALWAYS,//创建方式(总是创建,覆盖旧文件)
FILE_ATTRIBUTE_NORMAL,//普通的文件属性
NULL//临时文件句柄
);

if (INVALID_HANDLE_VALUE==hFile)//创建失败
{
dwErrorNum=GetLastError();

FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwErrorNum,
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL
);
::MessageBox(NULL,lpMsgBuf,"打开文件错误!",MB_OK);
LocalFree(lpMsgBuf);//释放生成的错误信息
}

hFile2=CreateFile( "c:\\aa.txt",//文件名称
GENERIC_READ,//读写权限
NULL,//不允许共享使用该文件
NULL,//不设置文件的安全属性
OPEN_EXISTING,//创建方式(总是打开)
FILE_ATTRIBUTE_NORMAL,//普通的文件属性
NULL//临时文件句柄
);

if (INVALID_HANDLE_VALUE==hFile2)//创建失败
{
dwErrorNum=GetLastError();

FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwErrorNum,
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL
);
::MessageBox(NULL,lpMsgBuf,"打开文件错误!",MB_OK);
LocalFree(lpMsgBuf);//释放生成的错误信息
CloseHandle(hFile);
return;
}

CloseHandle(hFile);
CloseHandle(hFile2);
}

热心网友 时间:2024-11-05 19:08

搞那么多干嘛,C语言中提供库函数来判断一个文件是否结束!去查查书!

热心网友 时间:2024-11-05 19:09

某个文件“可能还没有完全落地”就被发送走?
“没有完全落地”意味着写操作没有完成,当文件采用互斥访问时上述情况是不可能发生的!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高考560分能上211大学吗? - 知乎 河北高考多少分能上211大学 河北2023高考211分数线是多少? 考560分能上211大学吗河北 刀剑英雄合王者武器多少费用 刀剑英雄帝辰王者现在什么价位 2021年度工程施工合同范本 2021承包转让简单的合同范本 2021医院食堂承包合同范本 div+css+js实现菜单的收缩与展开 调用数据库内容的时候为什么内容字段... C语言中为什么在执行将一个文件复制到另一个文件的程序时无法读取源文... C:\INETPUB\WWWROOT\*\*.MDB;它已经被别的用户以独占的方式打开,或没有... 公主病怎么办 有一条一条的告诫吗 c++ 判断文件是否被打开 或者以独占方式打开 中专毕业怎么报考横店影视学院 聊斋三江城那集蛇妖和江城有什么仇 电视剧里有个市场叫夏忠民那是什么电视剧求剧名 扬州天宁塔介绍? 宁波天宁寺塔位于哪儿 在哪能下高清《变形金刚3》啊?今年国外大片都不好下,还有《加勒比海盗4... 软芙蓉王和软中华哪个好 芙蓉王软蓝软中华哪个好抽一点 3.8节简短祝福语 2016遂昌高坪三八妇女节广场舞比赛 我是特种兵24集卫生员被杀之后怎么没有了 《我是特种兵》这个电视剧最后 伞兵、卫生员、强子到底死没死_百度知... 我是特种兵24中卫生员不是死了吗?为什么到后来就没死啊? 《我是特种兵》里卫生员明明头部中弹而死,怎么那么快又安然无恙了?_百... 太阳能热水器不打孔固定 速热水器 租的房子,不让打孔 怎么安装好呢? 你比北京美丽男二后悔了吗 二次元cp网名二次元CP头像 技巧攻略狙击手:胜利的艺术 狙击手:胜利的艺术攻略 狙击手:胜利的艺术输入得到武器的秘籍无效,急急急急 《狙击手胜利的艺术》中怎样上梯子 游戏《狙击手:胜利的艺术》第三关怎么过 求狙击手胜利的艺术有坦克那关的攻略 &lt;狙击手:胜利的艺术&gt;的操作说明 狙击手胜利的艺术键盘如何控制 蔷薇少女第三部什么时候有? 蔷薇少女还会出第三季吗 一个泰国电视剧好像是女主怀孕了还不原谅男主,自己去了一个地方住最... 蔷薇少女的漫画总共有几部?叫什么名字? 请问一下伪娘和cd区别是什么? 2010南非世界杯主题曲央视中文翻译 wakawaka白话翻译,帮我翻译全部 2010年世界杯主题曲歌词的中文翻译 wakawaka歌词(包括中间非英语的那段)? 权力的游戏第四季第五集被雪诺一剑刺穿嘴巴的那个守夜人叛军是谁演...