1樓:匿名使用者
這個問題太好解決了,有幾種方法
方法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#incldue
int main()
程序2#incldue
int main()
while(getlasterror() == error_already_exists);
closehandle(m_mutex);
//如果程式能執行到這裡,代表程序一已經寫完檔案了
//程序二,你的**寫在這裡.
return 0;}
2樓:
寫檔案結束符由檔案關閉函式建立。
例如 fclose(fout).
不必另寫。
讀檔案結束符可以用
int feof ( file * stream );
標準函式判斷。
兩程序問題,如果寫程序未關閉檔案,寫檔案部分必須用int fflush ( file * stream );
這種函式釋放緩衝區,保證資料真正寫出去了,併傳送訊息到讀程序,讓讀程序讀。不通過eof檢測。
3樓:匿名使用者
判斷檔案是否寫結束
只要判斷它是否被開啟就可以了
判斷檔案是否被開啟的函式:
bool isfileinuse(string filename)
4樓:匿名使用者
寫檔案的程序在開啟檔案輸出的時候使用windows的api介面:createfile,其第三個引數dwsharemode設定為null,就是不允許共享訪問.然後第二個程序在準備傳送檔案時首先以讀檔案的方式呼叫createfile介面也以獨佔方式開啟檔案.
此時如果第二個程序開啟檔案失敗,createfile失敗後用getlasterror得到的錯誤為32號則表示第一個程序還在寫檔案(檔案沒寫完).以下是簡單的檢查**,你可以借鑑:
void cfile1dlg::onok()hfile2=createfile( "c:\\aa.txt",//檔名稱
generic_read,//讀寫許可權
null,//不允許共享使用該檔案
null,//不設定檔案的安全屬性
open_existing,//建立方式(總是開啟)file_attribute_normal,//普通的檔案屬性null//臨時檔案控制代碼
);if (invalid_handle_value==hfile2)//建立失敗
closehandle(hfile);
closehandle(hfile2);}
5樓:
搞那麼多幹嘛,c語言中提供庫函式來判斷一個檔案是否結束!去查查書!
6樓:標苦運先
某個檔案「可能還沒有完全落地」就被髮送走?
「沒有完全落地」意味著寫操作沒有完成,當檔案採用互斥訪問時上述情況是不可能發生的!
7樓:青龍珏
eof()是用於判斷資料庫中表的紀錄指標是否是最後一條的不知道你這裡的說的檔案結束,是不是隻資料庫中表的記錄如果是 if recordset.eof=true就證明是最後一條記錄了,否則,則不是……
8樓:
應該是讀檔案結束吧,寫檔案只與檔案的大小有關係,一般這個大小是非常大的,基本不用考慮空間的問題。lz可以去看 c語言庫中的函式即可
9樓:匿名使用者
其實這是一個程序間通訊的問題,過程如下:
程序1寫檔案
程序1寫完檔案,通過某種通訊方式通知程序2,我寫完啦程序2收到該寫完的訊息,開始傳送檔案
至於程序間如何進行通訊
我對linux平臺的比較熟悉,比如環境變數、管道、訊號量、socket等等
舉個linux平臺的簡單方法,用管道
//process1.cpp
#include
int main()
//process2.cpp
#include
int main()
然後就生成process1和process2兩個可執行檔案咯在命令列下這樣執行:
$./process1 | ./process2這樣表示,process1的輸出是process2的輸入,那麼process2就會等待process1輸出了ok才會讀入再開始傳送檔案
10樓:匿名使用者
寫檔案結束?
or讀檔案結束?
如何判斷讀取檔案結束
11樓:匿名使用者
持續讀取字元,直到讀函式返回錯誤,這時進行feof判斷,如果為真,則表示文字文件結束。
int feof(file *fp);
功能為判斷文件是否結束,如果已經達到檔案尾,返回1,否則返回0.
除此外,部分讀函式本身返回值同樣可以判斷是否結尾。
1 fgets, 返回null表示檔案結尾。
2 fscanf, fgets等,返回eof表示=檔案結尾。
如何在visual basic中判斷檔案是不是存在的函式或方法
其實型別轉換函式很簡單,就是在所有型別的字首上加一個c,比如long型的字首是lng所以轉換為long的函式就是clng依次類推 需要說名的是cint有類似四捨五入的功能不過有靠偶性質。要是把 123 轉換為123就用val就可以。其他很多函式我覺得你最好是學到 在學,比如我給你說個lof 得到檔案...
c如何判斷文字檔案為空
c 判斷文字檔案為空,必須要先讀一下檔案 讀一個字元 才能判斷是否為空。剛開啟檔案時,檔案狀態標識都是初始化狀態,eof 函式是根據檔案狀態標識來判斷當前是否到了檔案尾,而不是用來判斷檔案是否為空。當讀取檔案資料時,遇到檔案尾時,系統會更改檔案狀態標識為檔案尾,同時,返回eof標誌。include ...
如何判斷產生的磁場方向如何判斷磁場方向
1 電流產生的磁場 用右手螺旋定則判斷 安培定則,也叫右手螺旋定則,是表示電流和電流激發磁場的磁感線方向間關係的定則。通電直導線中的安培定則 安培定則一 用右手握住通電直導線,讓大拇指指向電流的方向,那麼四指的指向就是磁感線的環繞方向 通電螺線管中的安培定則 安培定則二 用右手握住通電螺線管,讓四指...