A. CFile怎样判断是否读到文件结束了
1,先获取内容长度,在搜索\r\n得到最后一行位置,在把指针调整到那里。
2,读文件版是有个文件指针,调用权Read时文件指针制动向前移动。
3,下次再调用是是接着上次文件指针读。mile.Read(sRead,2),第二个参数指定了最多读几个字符,自己指定了读两个字符。例如,
CFile fr;
...//打开文件
char readbuf[65535];
int n;
while((n = fr.Read(readbuf, 65535)) > 0)//读文件的长度大于0,说明文件没有结束,否则已经结束了
{
//操作
}
B. 如何判断写文件结束
这个问题太好解决了,有几种方法
方法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;
}
C. gets与scanf如何判断读取文件结束
gets与scanf判断读取文件结束
(1) void * =====NULL
(2)int =======EOF=======0
当出错或到文件末尾时:
scanf() 返回int,故与EOF匹配
gets() 返回char * ,故与NULL匹配
两个例子:
(1)
#include<stdio.h>
void main()
{
char a[20];
int i=0;
freopen("input.txt","r",stdin);
while(scanf("%s",a)!=EOF) printf("%s",a);
}
#include<stdio.h>
void main()
{
char a[20];
int i=0;
freopen("input.txt","r",stdin);
while(gets(a)!=NULL) puts(a);
}
补充:(1)关于' ' ,'\0' ,NULL ,EOF,空格(ascii码为32) 的区别 :
' '和空格 等价
'\0' 是ascii码为0的字符,即为空字符
至于 NULL和EOF要依情况而定了。
(2)
scanf()函数返回成功赋值的数据项数,出错时则返回EOF
gets()用于从标准输入流stdin读入一个整行(以'\n'或EOF)结束,写入ptr指向的字符数组,并返回这
个指针;出错或遇到文件结束时则返回NULL。行末的'\n'从流中取出,但不写入数组。gets()不检查被写
入的数组大小。
getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注
意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。
D. 怎么判断文件已经到尾了
在C语言里,如果读到了EOF就表明文件结束 。ch=fgetc(fp);
ch==EOF也是文件结尾
E. 怎么判断文件每行的终止符和末尾终止符
如果指的是文本文件,那么你先用16进制编辑程序看一下,每行结束时用的是否是0x0d 0x0a,即回车符和换行符。如果是,则这个文件用记事本打开能正确显示。
C++编程用fgets函数一次可读取一行数据;如果feof(fp)返回真值则文件结束,或者用fgets函数返回值来判断,比如fgets返回值是EOF或-1,0则表示读取失败,或到了文件结尾。(fgets返回值应当是本次读到的字符数。)