Я пытаюсь исследовать проблему, из-за которой Windows C++ API BackupRead, используемый в нашем программном обеспечении, зависает для нескольких файлов.
Я подозреваю, что причиной являются большие потоки файлов.
Я написал небольшой инструмент для имитации вызовов BackupRead, вызываемых в цикле для чтения всех потоков файла и их вывода.
Я вижу, что инструмент также зависает в вызовах BackupRead для файлов Microsoft Excel (.xls и .xlsx).
Я хотел знать, есть ли в этих файлах Excel что-то особенное, вызывающее такое поведение.
Вывод инструмента (зависает после чтения BACKUP_DATA):
Getting streams for file: file.xls
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_SECURITY_DATA, Size: 260, NameSize: 0
TotalStreamSize: 260, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 260, ToRead: 260
Completed reading stream: BACKUP_SECURITY_DATA and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_DATA, Size: 43520, NameSize: 0
TotalStreamSize: 43520, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 43520, ToRead: 43520
Completed reading stream: BACKUP_DATA and resetting buffer for next stream
Ожидаемый результат инструмента:
Getting streams for file: file.pdf
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_SECURITY_DATA, Size: 200, NameSize: 0
TotalStreamSize: 200, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 200, ToRead: 200
Completed reading stream: BACKUP_SECURITY_DATA and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_DATA, Size: 229272, NameSize: 0
TotalStreamSize: 229272, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 229272, ToRead: 229272
Completed reading stream: BACKUP_DATA and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_OBJECT_ID, Size: 64, NameSize: 0
TotalStreamSize: 64, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 64, ToRead: 64
Completed reading stream: BACKUP_OBJECT_ID and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 0
No more streams to read
Код инструмента:
int main()
{
wstring wstrFile = "";
HANDLE hFile = CreateFileW(
wstrFile.c_str(),
GENERIC_READ | ACCESS_SYSTEM_SECURITY,
FILE_SHARE_READ,
nullptr,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_SEQUENTIAL_SCAN,
nullptr);
if (hFile == INVALID_HANDLE_VALUE)
{
std::wcerr
Подробнее здесь: https://stackoverflow.com/questions/798 ... reams-of-a
Windows C++ API BackupRead зависает (?) при попытке получить все потоки файла ⇐ C++
Программы на C++. Форум разработчиков
1763029594
Anonymous
Я пытаюсь исследовать проблему, из-за которой Windows C++ API BackupRead, используемый в нашем программном обеспечении, зависает для нескольких файлов.
Я подозреваю, что причиной являются большие потоки файлов.
Я написал небольшой инструмент для имитации вызовов BackupRead, вызываемых в цикле для чтения всех потоков файла и их вывода.
Я вижу, что инструмент также зависает в вызовах BackupRead для файлов Microsoft Excel (.xls и .xlsx).
Я хотел знать, есть ли в этих файлах Excel что-то особенное, вызывающее такое поведение.
Вывод инструмента (зависает после чтения BACKUP_DATA):
Getting streams for file: file.xls
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_SECURITY_DATA, Size: 260, NameSize: 0
TotalStreamSize: 260, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 260, ToRead: 260
Completed reading stream: BACKUP_SECURITY_DATA and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_DATA, Size: 43520, NameSize: 0
TotalStreamSize: 43520, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 43520, ToRead: 43520
Completed reading stream: BACKUP_DATA and resetting buffer for next stream
Ожидаемый результат инструмента:
Getting streams for file: file.pdf
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_SECURITY_DATA, Size: 200, NameSize: 0
TotalStreamSize: 200, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 200, ToRead: 200
Completed reading stream: BACKUP_SECURITY_DATA and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_DATA, Size: 229272, NameSize: 0
TotalStreamSize: 229272, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 229272, ToRead: 229272
Completed reading stream: BACKUP_DATA and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 20
StreamId: BACKUP_OBJECT_ID, Size: 64, NameSize: 0
TotalStreamSize: 64, RemainingBufferSize: 1048556, OffsetInBuffer: 20
Data BackupRead returned: 1, BytesRead: 64, ToRead: 64
Completed reading stream: BACKUP_OBJECT_ID and resetting buffer for next stream
----------------------------
Header BackupRead returned: 1, BytesRead: 0
No more streams to read
Код инструмента:
int main()
{
wstring wstrFile = "";
HANDLE hFile = CreateFileW(
wstrFile.c_str(),
GENERIC_READ | ACCESS_SYSTEM_SECURITY,
FILE_SHARE_READ,
nullptr,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_SEQUENTIAL_SCAN,
nullptr);
if (hFile == INVALID_HANDLE_VALUE)
{
std::wcerr
Подробнее здесь: [url]https://stackoverflow.com/questions/79818733/windows-c-api-backupread-is-stuck-when-trying-to-fetch-all-the-streams-of-a[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия