abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:11 | IT novinky

    Společnost IBM představila novou generaci svých serverů: IBM Power11.

    Ladislav Hagara | Komentářů: 0
    včera 15:33 | Komunita

    Multiplatformní digitální pracovní stanice pro práci s audiem Ardour byla postavena na GTK2. Vývojáři neplánovali její portaci na GTK3 nebo GTK4. Naopak, v lednu loňského roku si vytvořili vlastní fork GTK2 s názvem YTK. Ten v únoru letošního roku přestal být volitelným a nově byla zcela odstraněna podpora GTK2.

    Ladislav Hagara | Komentářů: 7
    včera 11:33 | Nová verze

    Byla vydána nová verze 6.4 linuxové distribuce Parrot OS (Wikipedie). Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 11:22 | Pozvánky

    Společnost initMAX pořádá sérii bezplatných webinářů věnovaných novému Zabbixu 7.4. Podrobnosti a registrace na webu initMAX.

    … více »
    Heřmi | Komentářů: 0
    včera 03:44 | Nová verze

    Byla vydána verze 7.0 open source platformy pro správu vlastního cloudu OpenNebula (Wikipedie). Kódový název nové verze je Phoenix. Přehled novinek v poznámkách k vydání v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 1
    včera 00:11 | Nová verze

    E-mailový klient Thunderbird byl vydán ve verzi 140.0 ESR „Eclipse“. Jde o vydání s dlouhodobou podporou, shrnující novinky v upozorněních, vzhledu, správě složek a správě účtů. Pozor, nezaměňovat s průběžným vydáním 140.0, které bylo dostupné o týden dříve.

    Fluttershy, yay! | Komentářů: 14
    7.7. 15:11 | IT novinky

    Organizace Video Games Europe reprezentující vydavatele počítačových her publikovala prohlášení k občanské iniciativě Stop Destroying Videogames.

    Ladislav Hagara | Komentářů: 0
    7.7. 13:22 | IT novinky

    Společnost Raspberry Pi nově nabzí Raspberry Pi Camera Module 3 Sensor Assembly, tj. samostatné senzorové moduly z Raspberry Pi Camera Module 3.

    Ladislav Hagara | Komentářů: 0
    7.7. 13:00 | Nasazení Linuxu

    Cathode Ray Dude v novém videu ukazuje autorádio Empeg Car (později Rio Car) z let 1999–2001. Šlo o jeden z prvních přehrávačů MP3 do auta. Běží na něm Linux. Vyrobeno bylo jen asi pět tisíc kusů, ale zůstala kolem nich živá komunita, viz např. web riocar.org.

    Fluttershy, yay! | Komentářů: 1
    7.7. 02:11 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.7.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (60%)
     (27%)
     (7%)
     (2%)
     (1%)
     (1%)
     (3%)
    Celkem 371 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: chyba při otevírání souboru "file.open(QIODevice::ReadOnly | QIODevice::Text)"

    9.8.2011 14:32 Milan Bača | skóre: 2 | Valašské Meziříčí
    chyba při otevírání souboru "file.open(QIODevice::ReadOnly | QIODevice::Text)"
    Přečteno: 227×
    Mohl by mi někdo prosím pomoct? Externím programem plním textový soubor, který si hlídám pomocí QFileSystemWatcher. Když se v něm něco objeví tak chci načíst všechny řádky a hned jej zase vymazat. Při prvním naplnění souboru, QFileSystemWatcher změnu souboru odchytí a spustí metodu checkFile(), která spustí metodu loadFile(STACK_FILE_PATH). A tady nastává chyba. Soubor se neotevře jen pro čtení a hned se vymaže. V logu se mi objeví "Proces nemá přístup k souboru, neboť jej právě využívá jiný proces.". Při dalším naplnění souboru už vše funguje jak má. Už opravdu netuším co dělám špatně. Mohl by mě někdo nakopnout správným směrem? děkuji
        QFileSystemWatcher *fileWatcher;
        fileWatcher = new QFileSystemWatcher(this);
        fileWatcher->addPath(STACK_FILE_PATH);
        connect(fileWatcher, SIGNAL(fileChanged(QString)), this, SLOT(checkFile()));
    
    void Controller::checkFile()
    {
        if (connectionState)
            fileSystem->loadFile(STACK_FILE_PATH);
    }
    
    void FileSystem::loadFile(const QString &fileName)
    {
        QFile file(fileName);
        QStringList pathsList;
        if (file.exists() && (file.size() > 0)) {
            if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
                emit newLog(tr("Čtení"));
                emit newLog(file.errorString());
            } else {
                QTextStream out(&file);
                while (!out.atEnd()) {
                    QString line = out.readLine();
                    pathsList << line;
                }
                emit newListForCheck(pathsList);
                file.close();
            }
    
            if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
                emit newLog(tr("Výmaz"));
                emit newLog(file.errorString());
            } else {
                QTextStream in(&file);
                in << "";
                file.close();
            }
        }
    }
    

    Odpovědi

    9.8.2011 22:14 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
    Rozbalit Rozbalit vše Re: chyba při otevírání souboru "file.open(QIODevice::ReadOnly | QIODevice::Text)"

    S QFileSystemWatcher můžeš narazit na spoustu problémů lišících se platformu od platformy. Mně se osvědčilo vždy na začátku slotu napojeném na fileChanged/directoryChanged cestu z "wočru" odebrat, provést co je třeba a na konci slotu cestu znovu přidat. Stávalo se mi v některých případech, že signál o změně přišel jen jednou. Možná to vyřeší tvůj problém s omezeným přístupem k souboru.

    Ještě pár tipů:

    while (!out.atEnd()) {
        QString line = out.readLine();
        pathsList << line;
    }
    bych nahradil za:
    while (file.canReadLine()) {
        QString line = out.readLine();
        pathsList << line;
    }
    a smazat obsah souboru jde lépe:
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
        emit newLog(tr("Výmaz"));
        emit newLog(file.errorString());
    } else {
        file.close();
    }

    31.8.2011 10:56 Milan Bača | skóre: 2 | Valašské Meziříčí
    Rozbalit Rozbalit vše Re: chyba při otevírání souboru "file.open(QIODevice::ReadOnly | QIODevice::Text)"
    Zdravím, odebrání cesty problém nevyřešilo, jen se objevuje náhodně.

    náhrada kódu
    while (!out.atEnd()) {
        QString line = out.readLine();
        pathsList << line;
    }
    
    za
    while (file.canReadLine()) {
        QString line = out.readLine();
        pathsList << line;
    }
    
    nefunguje, ale to mě zas tak netrápí jak to sledování souboru

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.