簡體   English   中英

無法在C ++中將消息寫入文件?

[英]Not able to write messages into the file in c++?

您是否看到任何原因,因為哪一個processName不會寫入sysSettings文件中? 我不知道為什么不在那里寫。 請幫忙 !!!

void pushSysSet(const char* processName)
    {
        char oneLine[15];
        fstream sysSettings;
        sysSettings.open("p_appmanager/src/sys_settings.txt",ios::in | ios:: out | ios::app);
        if(!sysSettings.is_open())
        {
            if(debugFlag)
            {
                cout<<currentTime()<<"::"<<"Unable to open sys_settings file"<<strerror(errno)<<endl;
                cout.flush();
            }
            return;
        }
        while(!((sysSettings.getline(oneLine,sizeof(oneLine))).eof()))
        {
            if(!strcmp(oneLine,processName))
                return;
        }
        sysSettings<<processName;
        sysSettings.flush();
        sysSettings.close();
    }

由於將eof位置1,因此將processName寫入流失敗。 在寫入之前,請使用sysSettings.clear()清除流的錯誤狀態標志:

while(!((sysSettings.getline(oneLine,sizeof(oneLine))).eof()))
{
        if(!strcmp(oneLine,processName))
            return;
}
sysSettings.clear();
sysSettings<<processName;

切勿使用eof()控制循環。 那么所有的C字符串呢?

void pushSysSet(const char* processName)
{
    fstream sysSettings("p_appmanager/src/sys_settings.txt", ios::in | ios::out | ios::app);
    if(!sysSettings)
    {
        if(debugFlag)
        {
            cout<<currentTime()<<"::"<<"Unable to open sys_settings file"<<strerror(errno)<<endl;
            cout.flush();
        }
        return;
    }
    std::string oneLine;
    while(std::getline(sysSettings, oneLine))
    {
        if(oneLine == processName)
            return;
    }
    sysSettings.clear();
    sysSettings << processName << '\n';
}

我整理了一下代碼。 如果您不檢查結果,則沒有必要在超出范圍之前進行單獨的刷新和關閉操作; 無論如何,那是析構函數的一部分。 使用std :: string消除可能的緩沖區溢出或名稱被截斷的情況,通常可以使事情變得更好。 清理while循環的條件。

我還在processName輸出之后添加了換行符:由於您的閱讀代碼顯然希望該東西本身在一行上,因此在編寫代碼中確保這一點是正確的。

最后,正如Casey指出的那樣,一旦您讀取了整個文件,流就處於錯誤狀態,並且不會響應您的寫入,因此請首先清除狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM