|
|
|
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Stream write error
, При сохранении
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
При попытке сохранения файла из ресурса вылетает Stream write error. |
Adil |
|
Код — в студию! |
Kamenev_D |
|
Есть функция:
void __fastcall TForm1::InstallBDE() { TResourceStream *bde_stream = new TResourceStream(0,»BDE_ONLY», «BDE» ); bde_stream->SaveToFile(Path_Edit->Text+»BdeInst.dll»); delete bde_stream; typedef DWORD (CALLBACK* LPRSP)(DWORD,DWORD); HINSTANCE hDLL; AnsiString BDE_DLL = Path_Edit->Text + «BdeInst.dll»; hDLL = LoadLibrary(BDE_DLL.c_str()); if(hDLL) { LPRSP RSP = (LPRSP)GetProcAddress(hDLL, «DllRegisterServer»); if(RSP==NULL) { ShowMessage(«Не найдена указанная процедура»); return ; } if (RSP != NULL) RSP(0, 1); } FreeLibrary(hDLL); } которая вытаскивает BdeInst.dll и запускает его в обработчике кнопки вызываеться эта функция — и получаем эррор(который может появляться через раз) |
Adil |
|
Проверь в отладчике, что у тебя в Path_Edit->Text, значение bde_stream->Size (должно соответствовать размеру ресурса), мосмотри что лежит в bde_stream->Memory (должны быть байты как в ресурсе). А вообще, TResourceStream не имеет «своего» метода SaveToFile — он его унаследовал от TCustomMemoryStream и поэтому bde_stream->SaveToFile вовсе не добавит ресурс к длл-ке, как ты, имхо, надеешься, просто перепишет файл солдержимым своего Memory… З.Ы. Сообщение об ошибке еще может выскакивать, если твоя длл-ка используется при этом. |
Kamenev_D |
|
Цитата bde_stream->SaveToFile вовсе не добавит ресурс к длл Мне надо извлечь из ресурсов |
Adil |
|
Цитата Kamenev_D, 28.07.04, 13:49 — а это тогда о чем? |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Borland C++ Builder/Turbo C++ Explorer
- Следующая тема
[ Script execution time: 0,0261 ] [ 16 queries used ] [ Generated: 12.02.23, 19:14 GMT ]
Here is the log: [07/Mar/2002:09:40:22][20044.1100807][-conn270-] Notice: bind variable 'user_id' = '1364' [07/Mar/2002:09:40:22][20044.1100807][-conn270-] Notice: SQL(): select decode(ad_general_permissions.user_has_row_permission_p(1364, 'write', '33', 'FS_VERSIONS'), 't', 1, 0) from dual [07/Mar/2002:09:40:22][20044.1100807][-conn270-] Notice: SQL(): select desired.file_id, file_title, folder_p, depth * 24 as n_pixels_in, round (fsvl.n_bytes / 1024) as n_kbytes, n_bytes, to_char (fsvl.creation_date, 'MM/DD/YY HH24:MI') as creation_date, nvl (fsvl.file_type, upper (fsvl.file_extension) || ' File') as file_type, sort_key, fsvl.version_id, fsvl.client_file_name, fsvl.url from fs_versions_latest fsvl, ( select file_id, file_title, sort_key, depth, folder_p, owner_id, group_id, public_p, parent_id, level as the_level from fs_files where deleted_p = 'f' connect by parent_id = prior file_id start with file_id = :file_id ) desired where fsvl.file_id = desired.file_id and (ad_general_permissions.user_has_row_permission_p (:local_user_id, 'read', fsvl.version_id, 'FS_VERSIONS') = 't' o r owner_id = :local_user_id or folder_p = 't') order by sort_key [07/Mar/2002:09:40:22][20044.1100807][-conn270-] Notice: bind variable 'file_id' = '33' [07/Mar/2002:09:40:22][20044.1100807][-conn270-] Notice: bind variable 'local_user_id' = '1364' [07/Mar/2002:09:40:22][20044.1100807][-conn270-] Notice: bind variable 'local_user_id' = '1364' [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: SQL(): select file_type, n_bytes from fs_versions where version_id = :version_id [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: bind variable 'version_id' = '43' [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: SQL(): select group_id from fs_files fsf, fs_versions fsv where version_id = :version_id and fsf.file_id = fsv.file_id [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: bind variable 'version_id' = '43' [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: SQL(): select decode(count(*),0,0,1) from user_group_map where user_id = :user_id and group_id = :group_id [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: bind variable 'user_id' = '1364' [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: bind variable 'group_id' = '33' [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: SQL(): select count(fs_files.file_id) from fs_files, fs_versions_latest where fs_files.file_id = fs_versions_latest.file_id and fs_files.owner_id = :user_id and version_id = :version_id [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: bind variable 'user_id' = '1364' [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: bind variable 'version_id' = '43' [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: SQL(): select decode(ad_general_permissions.user_has_row_permission_p(1364, 'read', '43', 'FS_VERSIONS'), 't', 1, 0) from dual [07/Mar/2002:09:40:48][20044.1106956][-conn273-] Notice: SQL(): select version_content from fs_versions where version_id = 43 [07/Mar/2002:09:41:15][20044.1106956][-conn273-] Error: ora8.c:4472:stream_write_lob error writing to connection. incomplete write of 0 out of 16384 [07/Mar/2002:09:43:09][20044.1108999][-sched:4-] Notice: Running scheduled proc gc_send_bboard_alerts... [07/Mar/2002:09:43:09][20044.1108999][-sched:4-] Notice: Sending alerts for gc-bboard on http://eeduk.unis.edu.gt [07/Mar/2002:09:45:02][20044.1110026][-sched:11-] Notice: Running scheduled proc process_email_queue... [07/Mar/2002:10:02:13][20044.1115152][-sched:19-] Notice: Running scheduled proc send_scheduled_spam_messages... [07/Mar/2002:10:02:13][20044.1115152][-sched:19-] Notice: running scheduled spam sending daemon [07/Mar/2002:10:05:18][20044.2051][-sched-] Notice: Running scheduled proc sec_sweep_sessions... [07/Mar/2002:10:15:17][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:18][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:19][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:20][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:21][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:22][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:23][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:24][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:25][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:26][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:27][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die... [07/Mar/2002:10:15:28][4533.1024][-main-] Warning: unix: attempting again to kill process 20044 after waiting 10 seconds [07/Mar/2002:10:15:28][4533.1024][-main-] Notice: unix: waiting for killed process 20044 to die...
Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите восстановить пароль
Поиск по форуму |
Расширенный поиск |
во-первых, непонятно зачем Вам этот огород.
во-вторых,
FS.ReadBuffer(Buffer, SIZEof(Buffer));
а кто Вам сказал/обещал, что размер вашего ‘Текстовый документ (4).txt’ кратен SIZEof(Buffer) ?
в-третьих, а кто MS.Free делать будет?!
Serge_Bliznykov |
Посмотреть профиль |
Найти ещё сообщения от Serge_Bliznykov |
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке — https://slurm.club/3MeqNEk
Запись потока в файл
Delphi 7
Interbase 7
Вылетает ошибка «Stream write error» (Есть БД, в ней BLOB поле «TRAILER» содержит видеоданные, хочу их считать из базы и запихнуть в файл, затем проиграть т.к. не нашел способа проигрывать данные сразу из поля) Где лохонулся?
procedure TForm2.Panel3Click(Sender: TObject);
var
Stream : TMemoryStream;
Code : Word;
begin
Code:=0;
Stream:=TMemoryStream(Form1.IBQuery1.CreateBlobStream(Form1.IBQuery1.FieldByName(‘TRAILER’), bmRead));
Stream.Read(Code, SizeOf(Code));
Stream.Seek(0,0);
Stream.SaveToFile(‘F:test.avi’);
Stream.Free;
end;
Вы не создали экземпляр объкекта TMemoryStream
И Читаете с указетеля = 0. Это что вообще такое? )
Сейчас пример состряпаю.. .
У меня не установен интерБейз, поэтому с базой ничего сделать не могу но скажем будет примерно так:
Stream read/write error on 64-bit application
I read my physical drive and am having some problems.
64-bit applications:
- 512 bytes: Stream read error / Stream write error .
- Read : work
- ReadBuffer : not work
32-bit applications: work on all cases.
How to read 512 bytes on 64-bit applications?
Updated: I’ve run this application on another PC, it worked. I do not understand why.
Updated 2: Thanks to David Heffernan. The code below work. But why for 32-bit applications, it always succeed with the first code?
1 Answer 1
As per the documentation you need to ensure that the memory that you read in to is sector aligned.
File access buffer addresses for read and write operations should be physical sector-aligned, which means aligned on addresses in memory that are integer multiples of the volume’s physical sector size. Depending on the disk, this requirement may not be enforced.
Allocate two sectors worth of memory and then advance within that to a sector boundary.
After this, ptr points to an aligned location within your over-sized buffer. Perform your direct disk access with the memory starting at this aligned location.
The final sentence of the excerpt explains that this requirement may not be enforced which is why your code may work on some machines but not others.
Or indeed you may just be lucky with your 32 bit builds that they happen to give you a sector aligned memory address. Your supposed fix in the question edit doesn’t help since GetMem has no 512 byte alignment guarantee. If a call to GetMem happens to return an address that is 512 byte aligned, that’s just chance. You cannot rely on that.
There seems to be some confusion, judging from the comments. Let me see if I can spell this out a little more. Two aspects of direct disk access need to be aligned.
- The disk pointer and block size must be sector aligned.
- The memory buffer must be sector aligned.
I am referring to the second of these. You are meeting the first requirement, assuming the disk sector size is 512. But you are failing to meet the second requirement.