Re[34]: Как в одну строку кода прочитать содержимое файла в
От: · Великобритания  
Дата: 09.01.24 13:59
Оценка:
Здравствуйте, rg45, Вы писали:

RTFM, лузер.
R>Все? Что еще нужно сделать, чтоб ты отцепился?
/tmp$ cat ./rab.cpp                                                                                                                                                                                                                    ↑
#include <string>
#include <vector>
#include <iostream>
#include <fstream>

std::vector<char> read_all_bytes(const std::string& path)
{
   if (std::ifstream input(path, std::ios_base::binary | std::ios_base::ate); input)
   {
  std::cout << "path=" << path << ", tellg=" <<input.tellg() << std::endl;
      std::vector<char> bytes(input.tellg());
      input.seekg(0);
      input.read(bytes.data(), bytes.size());

      if (input.gcount() != std::streamsize(bytes.size()))
         throw std::runtime_error("File reading error");

      return bytes;
   }
   throw std::runtime_error("File not found or access denied: " + path);
}

int main()
{
  auto d = read_all_bytes("/");
  std::cout << d.size() << std::endl;
  std::cout << d.data() << std::endl;
  return 0;
}---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/tmp$ g++ ./rab.cpp  && ./a.out                                                                                                                                                                                                        ↑
path=/, tellg=9223372036854775807
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted (core dumped)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Вот такие они, С++ программисты. UB головного мозга.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[35]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 14:02
Оценка:
Здравствуйте, ·, Вы писали:

·>Вот такие они, С++ программисты. UB головного мозга.


Это ты иди предъявляй разработчикам говна, на котором ты работаешь. По докумнетации все четко, никакого UB.

RTFM, лузер.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[35]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 14:07
Оценка:
Здравствуйте, ·, Вы писали:

·>Вот такие они, С++ программисты. UB головного мозга.


А если предыдущий мой пост не убеждает, то на, задавись:

http://coliru.stacked-crooked.com/a/c60a244fc2985923

#include <fstream>
#include <vector>
#include <iostream>

std::vector<char> read_all_bytes(const std::string& path)
{
   if (std::ifstream input(path, std::ios_base::binary | std::ios_base::ate); input)
   {
      std::vector<char> bytes(input.tellg());
      input.seekg(0);
      input.read(bytes.data(), bytes.size());

      if (input.gcount() != std::streamsize(bytes.size()))
         throw std::runtime_error("File reading error");

      return bytes;
   }
   throw std::runtime_error("File not found: " + path);
}

int main()
try
{
   const auto bytes = read_all_bytes("E:\\Video");
   std::cout << "size = " << bytes.size() << std::endl;
}
catch(const std::exception& ex)
{
   std::cout << "[Exception]: " << ex.what() << std::endl;
}


g++ -std=c++20 -O2 -Wall -Wno-non-template-friend -pedantic -pthread main.cpp && ./a.out
[Exception]: File not found: E:\Video


RTFM, лузер.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[37]: Как в одну строку кода прочитать содержимое файла в
От: B0FEE664  
Дата: 09.01.24 14:08
Оценка:
Здравствуйте, ·, Вы писали:

·>Да, верно. Вместо того, чтобы сочинять кусок кода на десяток строк, в каждой из которой можно выстрелить себе в ногу, лучше иметь одну, надёжную, отлаженную, проверенную, в стандарте. В этом и есть мой поинт.

согласен
Автор: B0FEE664
Дата: 09.01 16:17
И каждый день — без права на ошибку...
Re[36]: Как в одну строку кода прочитать содержимое файла в
От: · Великобритания  
Дата: 09.01.24 14:10
Оценка:
Здравствуйте, rg45, Вы писали:

R>·>Вот такие они, С++ программисты. UB головного мозга.

R>А если предыдущий мой пост не убеждает, то на, задавись:
R>http://coliru.stacked-crooked.com/a/c60a244fc2985923


Щёлк! http://coliru.stacked-crooked.com/a/db538d0fc22602bf
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[37]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 14:12
Оценка:
Здравствуйте, ·, Вы писали:

·>Щёлк! http://coliru.stacked-crooked.com/a/db538d0fc22602bf


Ну иди репорти баг, что я могу сказать.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[38]: Как в одну строку кода прочитать содержимое файла в
От: · Великобритания  
Дата: 09.01.24 14:13
Оценка:
Здравствуйте, rg45, Вы писали:

R>·>Щёлк! http://coliru.stacked-crooked.com/a/db538d0fc22602bf

R>Ну иди репорти баг, что я могу сказать.
Иди доки читай, ламьё.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[39]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 14:26
Оценка:
Здравствуйте, ·, Вы писали:

·>Иди доки читай, ламьё.


Сам туда иди, чмо тупорылое:

https://timsong-cpp.github.io/cppwp/istream.unformatted#38

pos_type tellg();
38 Effects: Behaves as an unformatted input function (as described above), except that it does not count the number of characters extracted and does not affect the value returned by subsequent calls to gcount().

39 Returns: After constructing a sentry object, if fail() != false, returns pos_type(-1) to indicate failure.
Otherwise, returns rdbuf()->pubseekoff(0, cur, in).


И специально для тебя, имбецила, добавил дополнительную печать, чтоб тебе виднее было, чему равно fail() и чему равно tellg():

http://coliru.stacked-crooked.com/a/243f1a5358e0b46e
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 09.01.2024 14:27 rg45 . Предыдущая версия .
Re: Как в одну строку кода прочитать содержимое файла в массив?
От: andyp  
Дата: 09.01.24 14:27
Оценка:
Здравствуйте, Kluev, Вы писали:

K>есть ли в std аналог File.ReadAllBytes()?


Нет. Там и так всякой хрени вагон и маленькая тележка. Кто б еще пояснил, зачем эта муть в стандарте вообще нужна.
Re[40]: Как в одну строку кода прочитать содержимое файла в
От: · Великобритания  
Дата: 09.01.24 14:35
Оценка:
Здравствуйте, rg45, Вы писали:

R>
R>Otherwise, returns rdbuf()->pubseekoff(0, cur, in).
R>

Теплее. Осталось разобраться что возвращает pubseekoff.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[41]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 14:38
Оценка:
Здравствуйте, ·, Вы писали:

·>Теплее. Осталось разобраться что возвращает pubseekoff.


Ну, так что тебе мешает? Недостаток мозга, или что?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[42]: Как в одну строку кода прочитать содержимое файла в
От: · Великобритания  
Дата: 09.01.24 14:45
Оценка:
Здравствуйте, rg45, Вы писали:

R>·>Теплее. Осталось разобраться что возвращает pubseekoff.

R>Ну, так что тебе мешает? Недостаток мозга, или что?

pos_type seekoff(off_type off, ios_base::seekdir way,
ios_base::openmode which
= ios_base::in | ios_base::out);
3 Effects: Alters the stream positions within one or more of the controlled sequences in a way that is defined separately for each class derived from basic_streambuf in this Clause ([stringbuf.virtuals], [filebuf.virtuals]).
4 Default behavior: Returns pos_type(off_type(-1)).

но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[43]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 14:46
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, rg45, Вы писали:


R>>·>Теплее. Осталось разобраться что возвращает pubseekoff.

R>>Ну, так что тебе мешает? Недостаток мозга, или что?
·>

·>pos_type seekoff(off_type off, ios_base::seekdir way,
·> ios_base::openmode which
·> = ios_base::in | ios_base::out);
·>3 Effects: Alters the stream positions within one or more of the controlled sequences in a way that is defined separately for each class derived from basic_streambuf in this Clause ([stringbuf.virtuals], [filebuf.virtuals]).
·>4 Default behavior: Returns pos_type(off_type(-1)).


Ну и что ты мне тут тычешь. Какое тут нах Default behavior?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: Как в одну строку кода прочитать содержимое файла в массив?
От: rudzuk  
Дата: 09.01.24 14:55
Оценка:
Здравствуйте, andyp, Вы писали:

a> K>есть ли в std аналог File.ReadAllBytes()?


a> Кто б еще пояснил, зачем эта муть в стандарте вообще нужна.


Потому что, как показал данный топик, правильно написать загрузку целого файла в память могут не только лишь все
avalon/3.0.2
Re[3]: Как в одну строку кода прочитать содержимое файла в массив?
От: andyp  
Дата: 09.01.24 15:01
Оценка: +1 -1
Здравствуйте, rudzuk, Вы писали:

R>Потому что, как показал данный топик, правильно написать загрузку целого файла в память могут не только лишь все


Загрузить целый файл — все равно что реку выпить. Просто не надо делать так
Re[3]: Как в одну строку кода прочитать содержимое файла в массив?
От: Kluev  
Дата: 09.01.24 15:05
Оценка: +1
Здравствуйте, rudzuk, Вы писали:

R>Здравствуйте, andyp, Вы писали:


a>> K>есть ли в std аналог File.ReadAllBytes()?


a>> Кто б еще пояснил, зачем эта муть в стандарте вообще нужна.


R>Потому что, как показал данный топик, правильно написать загрузку целого файла в память могут не только лишь все


Именно. Более того решение этой задачи штатными средствами библиотеки не всегда возможо, а в большинстве случаев требует использования нативных АПИ ос.
Поэтому оно и должно быть стандартной функцией библиотеки скрывающей под капотом нативную реализацию.
Чтобы не было специальных олимпиад с классами буфферизированного ввода как в этом треде.
Re[43]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 15:08
Оценка:
Здравствуйте, ·, Вы писали:

R>>Ну, так что тебе мешает? Недостаток мозга, или что?

·>

·>pos_type seekoff(off_type off, ios_base::seekdir way,
·> ios_base::openmode which
·> = ios_base::in | ios_base::out);
·>3 Effects: Alters the stream positions within one or more of the controlled sequences in a way that is defined separately for each class derived from basic_streambuf in this Clause ([stringbuf.virtuals], [filebuf.virtuals]).
·>4 Default behavior: Returns pos_type(off_type(-1)).


Сюда посмотри, тупорез:

http://coliru.stacked-crooked.com/a/e04a1976fb307859

Нихера твой tellg() не возвращает ни pos_type(-1), ни pos_type(off_type(-1)) в этом случае. А вместо этого возвращает максимальное знаковое положительное число. Нужно разжевывать, что это означает, или сам выводы сделаешь?

Ну куда ты лезешь других поучать? Тебе нужно заткнуться, слушать и учиться.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 09.01.2024 15:49 rg45 . Предыдущая версия . Еще …
Отредактировано 09.01.2024 15:36 rg45 . Предыдущая версия .
Отредактировано 09.01.2024 15:19 rg45 . Предыдущая версия .
Отредактировано 09.01.2024 15:14 rg45 . Предыдущая версия .
Re[4]: Как в одну строку кода прочитать содержимое файла в массив?
От: rudzuk  
Дата: 09.01.24 15:12
Оценка:
Здравствуйте, andyp, Вы писали:

a> Загрузить целый файл — все равно что реку выпить. Просто не надо делать так


Иногда надо.
avalon/3.0.2
Re[44]: Как в одну строку кода прочитать содержимое файла в
От: · Великобритания  
Дата: 09.01.24 16:14
Оценка:
Здравствуйте, rg45, Вы писали:

r> Нихера твой tellg() не возвращает ни pos_type(-1)

Скорее всего это значит

tellg does not report the size of the file, nor the offset from the beginning in bytes. It reports a token value which can later be used to seek to the same place, and nothing more.

https://stackoverflow.com/questions/22984956/tellg-function-give-wrong-size-of-file

Т.е. дёргать tellg и надеятся, что оно вернёт что-то относящееся к размеру файла в общем случае нельзя.

В общем, возьми код в jdk и перепиши, я тебе сразу показал правильное решение, неясно зачем из себя мачо строишь.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[45]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 09.01.24 16:18
Оценка:
Здравствуйте, ·, Вы писали:

·>Т.е. дёргать tellg и надеятся, что оно вернёт что-то относящееся к размеру файла в общем случае нельзя.


Очень даже можно. А баги бывают везде — и в платформах, и в компиляторах. Для этого придумали такую чудесную штуку как баг репорты. Ну ты не слыхал, наверное.

·>В общем, возьми код в jdk и перепиши, я тебе сразу показал правильное решение, неясно зачем из себя мачо строишь.


Ступай-ка ты с миром. Вместе со своей jdk (для умственно неполноценных). Пока я тебя не послал куда-нибудь подальше.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 09.01.2024 16:20 rg45 . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.