Почему делает станд.:: fstream устанавливают EOF, укусил способ, которым он делает?

There are 2 ways to do this :

1. From Xml
     use :  
        <TextView
         .........
        android:gravity="center"/>

2. From Java class
    use : 

     [textview].setGravity(Gravity.CENTER);
15
задан Jeff Barger 24 June 2009 в 18:19
поделиться

1 ответ

Потому что таким образом он может обнаружить EOF , не зная, насколько велик файл. Все, что ему нужно сделать, это просто попытаться прочитать, и если чтение короткое (но не ошибка), значит, вы достигли конца файла.

Это отражает функциональность системы чтения вызов, который обычно заканчивается вызовом ввода-вывода файла (материал win32 может вызывать ReadFile , но я считаю, что функциональность аналогична).

Из прочтите раздел man-страницы «ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ» ( выделено мной):

В случае успеха количество прочитанных байтов возвращается (ноль означает конец файл) , а позиция файла - продвинулся на это число. Это не ошибка, если это число меньше, чем количество запрошенных байтов; этот может случиться, например, потому что меньше байты доступны прямо сейчас (может быть, потому что мы были близки к конец файла, или потому что мы читаем от трубы или от терминала), или потому что чтение () было прервано сигнал. В случае ошибки возвращается -1, а errno установлен соответствующим образом. В этом случае не уточняется, позиция файла (если есть) изменяется.

Кстати: хороший способ написать то, что вы хотите, будет примерно таким:

T something;
while(file.read(something, sizeof(something))) {
    // process your 'something'
}

это работает, потому что file.read (как и многие члены iostream) возвращает ссылка на сам iostream. У всех из них есть перегруженный оператор, позволяющий тестировать состояние потока. Аналогично чтению из std :: cin , while (std :: cin >> x) {...} тоже работает.

EDIT: вам следует знайте, что тестирование или неудача могут быть одинаково ошибочными по той же причине. На странице, которую вы связали с , fail () возвращает, если предыдущая операция не удалась. Это означает, что перед тестированием вам необходимо выполнить чтение или другую соответствующую операцию.

16
ответ дан 1 December 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: