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返回值應當是本次讀到的字元數。)