Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];

Вниз

Работа с CharToOEM   Найти похожие ветки 

 
АлеКо   (2003-03-25 09:08) [0]

Чертовщина какаято!
Пытаюсь заполнить файл данными в кодировке ДОС СР866, для этого использую функцию CharToOEM. Однако после окончания работы программы получаю файл заполненный пустыми строками.
При пошаговой работе в отладчике программа завершается с сообщением ошибки чтото вроде обращения к участку памяти и последняя ошибка RunTimeError 128, но при этом файл заполняется как надо. В чем может быть дело и может использовать чтото другое.
Спасибо!!!


 
Anatoly Podgoretsky   (2003-03-25 09:14) [1]

У тебя ошибка в 17 строке


 
АлеКо   (2003-03-25 09:20) [2]

в КАКОЙ СТРОКЕ НЕ ПОНЯЛ!!!


 
Radionov Alexey   (2003-03-25 09:21) [3]

Не знаю что там у вас в коде, поэтому выкладываю работающий пример (преобразование в верхний регистр для DOS кодировки). Специально (для примера) использую CharToOem, хотя разумнее было бы обойтись просто подъемом регистра.


Var S : String
Begin
With TStringList.Create Do
Try
LoadFromFile("somefile");
S := Text;
OemToChar(PChar(S), PChar(S));
S := AnsiUpperCase(S);
CharToOem(PChar(S), PChar(S));
Text := S;
SaveToFile("somefile");
Finally
Free;
End;
End;


 
АлеКо   (2003-03-25 09:26) [4]

А конструкция Try ... Finally обязательна???


 
Radionov Alexey   (2003-03-25 09:27) [5]

>АлеКо (25.03.03 09:26)
Страховка от утечки памяти при работе с негарантированнодоступными ресурсами.


 
АлеКо   (2003-03-25 09:35) [6]

А может быть необходимы какието директивы кампилятору передавать как например при работе с текстовыми файлами {I-}


 
Radionov Alexey   (2003-03-25 09:38) [7]

>АлеКо (25.03.03 09:35)
"Многое еще есть на свете, друг Горацио, что и не снилось нашим мудрецам". (с)

Почитай про "защищенное" программирование и т.п.


 
АлеКо   (2003-03-25 09:41) [8]

Ладно спасибо будем пробовать и эксперементировать.
"О сколько нам ошибок трудных готовит ....."


 
Anatoly Podgoretsky   (2003-03-25 09:47) [9]

Про строку не забывай в следующий раз и попутно приведенный код может выдать ошибку рантайм, поскольку не совсем защищенный.


 
Radionov Alexey   (2003-03-25 09:50) [10]

>Anatoly Podgoretsky © (25.03.03 09:47)
"Пусть в нее кинет камень, кто сам без греха" ;)

Имеется в виду нулевая длинна?


 
Anatoly Podgoretsky   (2003-03-25 10:01) [11]

Radionov Alexey © (25.03.03 09:50)
Именно это и эта ситуация вполне вероятная, нужна проверка

if S = "" then Exit;

Вот тогда неожиданной ошибки не будет, да и время не надо тратить на запись.


 
REA   (2003-03-25 10:03) [12]

SaveToFile("somefile"); - ограничение на сколько то мегабайт. 32 кажется, но может и меньше.


 
Radionov Alexey   (2003-03-25 10:06) [13]

>Anatoly Podgoretsky © (25.03.03 10:01)

Полностью согласен.

PS
Но Free в любом случае сработает. Другое дело, что неприятно заполучить AV в user32.dll (хотя оно тоже не чревато последствиями)


 
Anatoly Podgoretsky   (2003-03-25 10:08) [14]

REA © (25.03.03 10:03)
2 гб


 
Radionov Alexey   (2003-03-25 10:08) [15]

>REA © (25.03.03 10:03)
Вот так и вырастает флейм :))
MMF - оптимум имхо


 
REA   (2003-03-25 10:21) [16]

>2 гб - неа. Проверено опытным путем. Для записи используется TFileStream, который использует WriteFile, который и содержит ограничение. Ну может конечно у меня какая-то кривая OS попалась, но эффект точно был. Пришлось по частям сохранять. Загружает нормально.


 
Anatoly Podgoretsky   (2003-03-25 10:41) [17]

А может не ОС, ОС ограничивает размер файла 4 гб, Дельфи 2 гб - Integer, но это на все про все, не только под TStringList


 
REA   (2003-03-25 10:48) [18]

Ну вобщем спорить не буду. Попробуй на досуге. Ограничение было именно в API функции WriteFile, поскльку я вытащил ее наружу и попробовал записать напрямую без TFileStream.


 
Anatoly Podgoretsky   (2003-03-25 10:54) [19]

А чего пробывать, записывал до 4 гб, после получал ошибку и вытягивать не пришлось, самим TFileStream и писал


 
REA   (2003-03-25 11:09) [20]

Ok. Будет время, попробую выделить код в чистом виде и еще разок погонять. Наверно вспышка на солнце была, поскольку оно действительно должно работать... но не работало...


 
Anatoly Podgoretsky   (2003-03-25 11:17) [21]

Да не старайся особо, это ограничение системы, а если будешь пробовать, то писать надо в потоке, скажем буферами по 100 мб, тоже для WinApi.
Вот какое ограничение для платформы НТ не знаю, вполне возможно, что свыше 4 гб.


 
REA   (2003-03-25 11:20) [22]

Так какое все-таки ограничение в W98? 2Гб? У меня сохранялось существенно меньше (в итоге я сделал сохранение блоками по 10Mb на всякий случай).


 
Anatoly Podgoretsky   (2003-03-25 11:22) [23]

REA © (25.03.03 11:20)
4 гб, а сохранялосб меньше у тебя по другой причине, не потоковая запись, ограничение на память.


 
REA   (2003-03-25 11:29) [24]

>не потоковая запись - не overlapped в смысле? А TFileStream напрямую пишет.
>ограничение на память - это какое? Что ли TStringList.Text не весь в памяти и WriteFile не может записать его? И как это обойти?


 
Anatoly Podgoretsky   (2003-03-25 11:35) [25]

Не знаю, не встречал такого



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.008 c
6-19727
TButton
2003-02-11 19:44
2003.04.07
IP адресс


14-19805
OxOTHuK
2003-03-20 07:48
2003.04.07
Pointer s ака Указатели


3-19449
Siv Soft
2003-03-17 18:14
2003.04.07
Данные из InterBase в MSSQL


1-19647
Opera
2003-03-25 19:16
2003.04.07
Определение


1-19523
zloy_dima
2003-03-26 14:49
2003.04.07
Память





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский