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

Вниз

Как c assignfile открыть файл только для чтения?   Найти похожие ветки 

 
NewN   (2003-04-18 13:14) [0]

На Reset(f) выскакивает ошибка "RunTime error 5 at 000073DD", если файл только для чтения, а в справке ничего не написано.


 
Palladin   (2003-04-18 13:20) [1]

почитай здесь, может заметишь упоминание FileMode

Opens an existing file.

Unit

System

Category

I/O routines

procedure Reset(var F [: File; RecSize: Word ] );

Description

Reset opens the existing external file with the name assigned to F using the mode specified by the global FileMode variable. An error results if no existing external file of the given name exists or if the file can’t be opened with the current file mode. If F is already open, it is first closed and then reopened. The current file position is set to the beginning of the file.

Warning: The default value of FileMode is 2 (Read/Write access). If this is not changed to a read-only file mode before calling Reset, attempts to open read-only files will fail.

F is a variable of any file type associated with an external file using AssignFile. RecSize is an optional expression, which can be specified only if F is an untyped file. If F is an untyped file, RecSize specifies the record size to be used in data transfers. If RecSize is omitted, a default record size of 128 bytes is assumed.

If F is assigned an empty name, such as AssignFile(F, ""), then after the call to Reset, F refers to the standard input file.

If F is a text file, F becomes read-only.

After a call to Reset, Eof(F) is True if the file is empty; otherwise, Eof(F) is False.

Note: {$I+} handles run-time errors using exceptions. When using {$I-}, use IOResult to check for I/O errors.


 
Anatoly Podgoretsky   (2003-04-18 13:21) [2]

assignfile это не открытие, а связка имени с файлом.
Смотри спраку по ошибке 5


 
NewN   (2003-04-18 13:26) [3]

>>Palladin ©
- спасибо, а то у меня справка какая то неполная, это то что у меня про Reset:

Opens an existing file.

Unit

System

Category

I/O routines

procedure Reset(var F [: File; RecSize: Word ] );

Description

Reset opens the existing external file with the name assigned to F. An error results if no existing external file of the given name exists. If F is already open, it is first closed and then reopened. The current file position is set to the beginning of the file.

F is a variable of any file type associated with an external file using AssignFile. RecSize is an optional expression, which can be specified only if F is an untyped file. If F is an untyped file, RecSize specifies the record size to be used in data transfers. If RecSize is omitted, a default record size of 128 bytes is assumed.

If F is assigned an empty name, such as AssignFile(F, ""), then after the call to Reset, F refers to the standard input file.

If F is a text file, F becomes read-only.

After a call to Reset, Eof(F) is True if the file is empty; otherwise, Eof(F) is False.

Note: {$I+} handles run-time errors using exceptions. When using {$I-}, use IOResult to check for I/O errors.


 
Dms   (2003-04-18 13:27) [4]

дык FileMode надо использовать


 
NewN   (2003-04-18 13:29) [5]

>> Anatoly Podgoretsky ©
- В моём вопросе нигде не утверждается, что AssignFile - это открытие файла.


 
Sheng   (2003-04-18 13:30) [6]

FileMode:=fmOpenReadWrite; // или другое значение (см.F1)
IOResult;
{$I-}
Reset(StatFile);
{$I+}
if IOResult<>0 then Rewrite(StatFile);

и т.д.


 
Palladin   (2003-04-18 13:31) [7]

как интересно...
какой версии Delphi?


 
NewN   (2003-04-18 13:31) [8]

>>Dms (18.04.03 13:27)
- когда то давно я это уже делал, а когда сейчас потребовалось напрочь из головы вылетело, помню только что очень просто! Вопрос решён, всем спасибо, кто откликнулся.


 
NewN   (2003-04-18 13:33) [9]

>>Palladin © (18.04.03 13:31)
>>как интересно...
>>какой версии Delphi?

Delphi 5.0 Build 5.62
"C:\Program Files\Borland\Delphi5\Help\delphi5.hlp"


 
Anatoly Podgoretsky   (2003-04-18 13:49) [10]

В твоем вопросе это прямо утверждается!
"Как c assignfile открыть файл только для чтения"


 
NewN   (2003-04-18 14:05) [11]

>>Anatoly Podgoretsky © (18.04.03 13:49)
>>В твоем вопросе это прямо утверждается!
>>"Как c assignfile открыть файл только для чтения"

А если бы я написал - "Как на Паскале открыть файл?", вы бы сказали, что Паскаль - это тоже не открытие файла? Я просто указал каким методом я открываю (связываюсь) с файлом, что бы исключить дополнительные вопросы.


 
NewN   (2003-04-18 14:10) [12]

с AssignFile - не подразумевает что только с AssignFile.


 
Anatoly Podgoretsky   (2003-04-18 14:18) [13]

Ты далуешь на нечетку постановку вопроса, а мы тут при чем?


 
NewN   (2003-04-18 14:28) [14]

>>Anatoly Podgoretsky © (18.04.03 14:18)

А мне кажется, что мой вопрос свормулирован корректно, однозначно, и для знающего Паскаль человека - предельно понятно. Мне было бы достаточно в качестве ответа только одного слова - FileMode, Как минимум три человека поняли мой вопрос, и правильно на него ответили. А вот в вашем постинге, на самом деле постановка вопроса нечёткая ("Ты далуешь на нечетку постановку вопроса, а мы тут при чем?"
), по крайней мере я этот вопрос не понял.


 
Anatoly Podgoretsky   (2003-04-18 14:42) [15]

Ой ли?
Не к селу ни к городу приплел assignfile
Зато ни привел ни тип файла, ни режим доступа, и ты это называешь корректным вопросом. Да к нему вопросов больше чем ответов, точнее верных ответов совсем не может быть, только гадание.

Перевожу
"Ты далуешь на нечетку постановку вопроса, а мы тут при чем?"
следует читать так
"Ты жалуешься на нечеткую постановку вопроса, а мы тут при чем?"


 
icWasya   (2003-04-18 14:47) [16]

>>... н е привел ни тип файла, ни режим доступа...
а в данном случае это вообще не важно!!!


 
NewN   (2003-04-18 14:54) [17]

>>Anatoly Podgoretsky © (18.04.03 14:42)
>>Ой ли?
>>Не к селу ни к городу приплел assignfile
>>Зато ни привел ни тип файла,
- тип файла для этого вопроса имеет такое-же значение, как и остальные реквизиты файла (размер, дата создания, атрибуты, про чему вы про них не вспомнили?), т.е. никакого. - правильный ответ один, вне зависимости от типа файла.
>> ни режим доступа, и ты это называешь корректным вопросом.
- "Как открыть файл только для чтения?" - Разве это не явное указание того режима доступа,в котором я хотел бы открыть файл? Или что такое по вашему - режим доступа?



 
Anatoly Podgoretsky   (2003-04-18 14:56) [18]

То есть как это не важно?
Например для текстовых файлов, открытых с помощью Reset файл автоматически ReadOnly


 
Anatoly Podgoretsky   (2003-04-18 14:59) [19]

NewN (18.04.03 14:54)
У тебя приведена в сообщении абсолютно недостоверная информация, что в справке не указана ничего про ошибку 5. В справке это указано!!!
Кроме того, то на что ты ссылаешься называется темой, а сам вопрос находится ниже и на него я тебе уже ла ответ в 13:21
Ты явно до сих пор не посмотрел справку.


 
NewN   (2003-04-18 15:22) [20]

>>Например для текстовых файлов, открытых с помощью Reset файл >>автоматически ReadOnly
- Вот про это я на самом деле не знал. Хотя Вы, хотя бы по характеру описаной проблемы могли бы и сами догадаться, что файл не текстовый.
>>Кроме того, то на что ты ссылаешься называется темой,
- Согласен, поле "Тема" неверно использовал, но понятность и "чёткость постановки" вопроса от этого вряд-ли пострадали, если уж только поле "Тема" вообще не читать.
>> Смотри спраку по ошибке 5
>> Ты явно до сих пор не посмотрел справку.
- Где найти справку по ошибке номер пять? Вот это всё, что в моей справке написано про I/0 Errors. Какой абзац имеет отношение к моему случаю? Как эта справка может натолкнуть на правильное решение ( FileMode)? Если бы в справке всё было понятно, я бы и не стал вопрос на форум писать.

These errors cause termination if the particular statement was compiled in the {$I+} state. In the {$I-} state, the program continues to execute, and the error is reported by the IOResult function.

Number Name Description

100 Disk read error Reported by Read on a typed file if you attempt to read past the end of the file.

101 Disk write error Reported by CloseFile, Write, WriteIn, or Flush if the disk becomes full.

102 File not assigned Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not been assigned a name through a call to Assign or AssignFile.

103 File not open Reported by CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead, or BlockWrite if the file is not open.

104 File not open for input Reported by Read, Readln, Eof, Eoln, SeekEof, or SeekEoln on a text file if the file is not open for input.

105 File not open for output Reported by Write or Writeln on a text file if you do not generate a Console application.

106 Invalid numeric format Reported by Read or Readln if a numeric value read from a text file does not conform to the proper numeric format.


 
Anatoly Podgoretsky   (2003-04-18 15:33) [21]

Учимся пользоваться справочной системой, там прямо написано

All errors other than I/O errors and fatal errors are reported with the error codes returned by the Win32 error function, GetLastError. The error code values are dependent on the operating system, but you can see a list of them in the Win32 documentation.


 
Anatoly Podgoretsky   (2003-04-18 15:34) [22]

Выбери в меню Help третий сверху пункт.


 
NewN   (2003-04-18 15:44) [23]

Anatoly Podgoretsky © (18.04.03 15:33)

К описаной в моём вопросе проблеме Ваша выдержка из справочной системы не имеет никакого отношения.
Ведь там прямо написано - " other than I/O errors". ( кроме I/O errors). А ведь у меня именно I/O error (судя по справке к функции Reset). И зачем тогда всё остальное, что там написано? Это всё хорошо, но совершенно не к месту.


 
NewN   (2003-04-18 15:48) [24]

>>Anatoly Podgoretsky © (18.04.03 15:34)
>>Выбери в меню Help третий сверху пункт.

Состав это меню зависит от установленой конфигурации. У меня третьим пунктом - разделитель.


 
Anatoly Podgoretsky   (2003-04-18 15:51) [25]

"I/O errors" это название темы хелпа, а не ошибок ввода вывода, читать надо так, кроме ошибок описанных в "I/O errors" смотрите также ...
И это полностью к месту, как только посмотришь справку по Win32 то сразу найдешь свою error 5, если лень искать и если хочешь получить полное сообщение по ошибке, то воспользуйся SysErrorMessage, даже более того усиленно рекомендую.


 
Anatoly Podgoretsky   (2003-04-18 15:54) [26]

NewN (18.04.03 15:48)
Это тоже не проблема открой вручную, если ты не занешь, то справочная система состоит из множества независимых справок, три наиболее важнешие из них расположены в следующих папках:

Папка с установленной Дельфи
Папка с MS SDK
Папка с BDE

Есть и другие, но жти три самые важные


 
NewN   (2003-04-18 16:09) [27]

>>Anatoly Podgoretsky © (18.04.03 15:51)
>>Anatoly Podgoretsky © (18.04.03 15:54)


Посмотрел. Вот:
- 5L ERROR_ACCESS_DENIED
- Access is denied.
Вроде всё. Да и почему бы это в справке по Win32 должно быть упоминание о чисто паскалевской глобальной переменной FileMode? Мне думается, что даже перелопатив весь MSDN, правильного ответа на конкректно этот вопрос не найти - ведь это же функции паскаля а не Win32 API.


 
Anatoly Podgoretsky   (2003-04-18 16:49) [28]

А почему это в справке Дельфи должно быть описание ошики 5, которая относится к ошибка ввода/вывода операционной системы?
Весь хелп перывать не надо, достаточно посмотреть хелп Паскаля об ошибках ввода/вывода, в котором тебя отшлют в части ошибок ОС, в MS SDK
К чисто паскалю относятся ошибки от 100 до 106 по вводу выводу и от 200 до 229 фатальные ошибки.


 
NewN   (2003-04-18 17:01) [29]

>>Anatoly Podgoretsky ©
Вот описание ошибки #5.
- Access is denied. И что Вы посоветуете делать на основе полученной информации? В ситуации описанной в вопросе, как изменить, что добавить в код, что бы устранить ошибку?
Может быть попробуем по другому, Если вы знаете ответ на мой вопрос, послуживший началом этой ветки, то просто ответьте на него пожалуйста (в порядке исключения, не отсылая меня к справочной системе), обещаю что я беспрекословно сделаю всё так, как Вы скажете, а если в моём вопросе недостаточно информации для правильного ответа, то скажите, какая ещё информация Вас интересует?


 
NewN   (2003-04-18 17:06) [30]

Я то было подумал, что достаточно установить режим открытия файла только для чтения, присвоив соотв. значение переменной FileMode, но видимо Вы знаете другой, более правильный способ, запрятанный где то в дебрях справки MS SDK и BDE?


 
Anatoly Podgoretsky   (2003-04-18 17:22) [31]

NewN (18.04.03 17:01)
Что посоветую, да пока ничего, вот если бы привел больше информации и часть проблемного кода, включая объявдения, то возможно у тебя в нем ошибка.
А так только проверить а можешь ли ты писать туда вообще другими средствами, Про операционную систему ты сказал, она может просто запрещить туда писать. Проверь это эксплорером.
Пока у тебя вопрос похожий на такой "У меня в подвале подземный стук, товарищи ученые помогите".
И тогда кто ни будь сможет тебе помочь, тот кто знаком с данной проблемой, я же не могу гарантировать помощии при таком состояния дела.


 
NewN   (2003-04-18 17:36) [32]

To Anatoly Podgoretsky © (18.04.03 17:22):

Ну, писать мне туда не надо, файл открывается по сети из ресурса, доступного только для чтения. Я его просто считываю процедурой BlockRead, с этим проблем нет.
Код примерно такой

var
f: file of Byte;
FileName: string;
begin
<...>
AssignFile(f, FileName);
reset(f);
<...>
close(f);
<...>
end;

Пока были файлы с локальных дисков, то всё было нормально, когда попытался открыть из сетевого ресурса, доступного только для чтения - на reset(f); возникает описанная в начале ветки ошибка, и выполнение программы завершается? Что делать?


 
Anatoly Podgoretsky   (2003-04-18 17:43) [33]

Здесь как минимум остуствует

FileMode := fmOpenRead or fmShareDenyNone;

без этого режим fmOpenReadWrite
И зря ты всетаки не проверил можно ли туда писать, если туда доступ по чтению, все таки ХР
Кроме того не вижу назначения FileName
В какой именно строке возникает ошибка, проверить трассировкой.
Где защищенный блок, это все таки ресурс.


 
Anatoly Podgoretsky   (2003-04-18 17:46) [34]

Да и последний толи вопрос толи совет, почему не используется TFileStream он здесь больше подходящ и управление получше и многое другое, и пользоваться проще. Хотя все выше сказанное по поводу ражима доступа и прав, будет относиться и к нему.


 
NewN   (2003-04-18 17:57) [35]

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

Вот это -
FileMode := 0;
- правильный ответ, который всем кроме Вас был ясен ещё с самого начала, и заметье - все, кто ответил, ответили на вопрос правильно, не задавая лишних вопросов. Хотя бы это, говорит о том, что с самого начала в моём вопросе была вся необходимая информация для правильного ответа. А сам я не нашёл ответа потому, что стал жертвой неполноцености справочной системы (NewN (18.04.03 13:26)). А Ваши, Анатолий наезды на меня совершенно беспочвенны, ведь согласитесь - невозможно найти в Win32.hlp описания переменной system.FileMode, а значит и ответа на вопрос?


 
NewN   (2003-04-18 18:01) [36]

Просто программа с самого начала использовала стандартный паскалевский ввод и вывод, не переделывать же её из за одной строчки. Да и TFileStream тянет за собой Classes, Sysutils, ... что нежелательно из-за увеличения размера.


 
Anatoly Podgoretsky   (2003-04-18 19:36) [37]

NewN (18.04.03 17:57)
Так ты весь этот флейм затеял что бы поиздеваться, ну и ну, а я еще о тебе хорошо думал.
Больше на помощью не рассчитывай, только на подобное поведение.


 
NewN   (2003-04-21 09:48) [38]

>>Anatoly Podgoretsky © (18.04.03 19:36)
Прошу прощенмя, что долго не отвечал (в интернет я выхожу с работы, и к тому моменту уже ушёл домой, а потом были выходные).

>>Так ты весь этот флейм затеял что бы поиздеваться, ну и ну, а >>я еще о тебе хорошо думал.
>>Больше на помощью не рассчитывай, только на подобное поведение.
- Ваши слова меня очень удивили, непонятно, с чего Вы сделали такой вывод. Когда я задавал свой вопрос, то просто хотел помощи в решении проблемы, и совсем не предполагал, что ветка превратится в такой флейм, тем более не хотел издеваться над Вами, клянусь, я даже не предполагал, что Вы примете такое активное участие в обсуждении этого вопроса. В любом случае, если чем-то я Вас обидел, прошу прощения, я совсем недавно участвую интернет-конференциях, и может быть, по незнанию, нарушил какие-то этические нормы.


 
evvcom   (2003-04-21 09:58) [39]

Ребятки! Брейк! Успокойтесь... Вспомните слова кота Леопольда.



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

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

Наверх





Память: 0.56 MB
Время: 0.007 c
1-559
alexvan
2003-04-18 08:49
2003.05.01
Помогите с типом


7-820
pipl
2003-03-10 19:25
2003.05.01
включение компа программно


1-608
b-Ars
2003-04-15 22:40
2003.05.01
Out of resources - как бороться?


14-781
DeepProg
2003-04-14 23:04
2003.05.01
Incoming Connection&LAN. WinXP c WinME/98 не разговаривает


1-503
Yagoda
2003-04-20 12:42
2003.05.01
Внешний COM сервер ??





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский