![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прочитать текстовой файл,если он занят другой програмой?
sucer © (2003-06-16 06:23:00)Мастера помогите!
Как прочитать текстовой файл,если он занят другой програмой?
procedure p1;
var s:string;
( F,"data.mpq")Мастера помогите!
Как прочитать текстовой файл,если он занят другой програмой?
procedure p1;
var s:string;
F:Text;
begin
AssignFile(F,"data.mpq");ReSet(F);
Read(F,s);
CloseFile(F);
end; -НЕРАБАТАЕТ
KSergey (2003-06-18 15:54:00) [1]
ТОгда я на совсем понимаю - как это все может помочь, если вдруг пишущая программа открывает файл именно монопольно? Или я тут слабо смыслю? (что вполне возможно)
Игорь Шевченко (2003-06-18 15:16:00) [2]
KSergey © (18.06.03 14:55)
Если бы была возможность править программу, я полагаю, проблема бы у автора не возникла вообще, так как имея две программы, обмен данными можно организовать и более удобным способом :)
KSergey (2003-06-18 14:55:00) [3]
> Игорь Шевченко © (18.06.03 12:22)
> Я все-таки, полагаю, что режим открытия файла зависит не от авторства :)
Не совсем правда понял о чем замечание, я пытался высказаться в том смысле, что не факт, что есть возможность подправить записывающую программу...
Игорь Шевченко (2003-06-18 12:22:00) [4]
KSergey © (18.06.03 11:50)
> Здорово, конечно, но при условии, что вторая программа (или
> первая - та, что пишет) - своя.
Я все-таки, полагаю, что режим открытия файла зависит не от авторства :)
KSergey (2003-06-18 11:50:00) [5]
> Игорь Шевченко © (17.06.03 13:26)
Здорово, конечно, но при условии, что вторая программа (или первая - та, что пишет) - своя.
Автору. Если программа не своя - возможно она открывает файл монопольно - и тогда никак.
Игорь Шевченко (2003-06-17 13:26:00) [6]
> Вот еще что:Программа которая занимает файл постоянно в
> него что-то пишет
CreateFile (.....generic_read, file_share_write or file_share_read, ....)
sucer (2003-06-17 12:11:00) [7]procedure p1;
var s:string;
begin
try
FileMode:=0;
AssignFile(F,"data.mpq");ReSet(F);
Read(F,s);
ShowMessage("=>"+s);
except
Application.MessageBox(pchar(SysErrorMessage(GetLastError)),"er",MB_OK);
end;
CloseFile(F);
end;
procedure p2;
var s:string;
T:TMemoryStream;
begin
try
T:=TMemoryStream.Create;
T.LoadFromFile("data.mpq");
except
( pchar(SysErrorMessage(GetLastError)procedure p1;
var s:string;
begin
try
FileMode:=0;
AssignFile(F,"data.mpq");ReSet(F);
Read(F,s);
ShowMessage("=>"+s);
except
Application.MessageBox(pchar(SysErrorMessage(GetLastError)),"er",MB_OK);
end;
CloseFile(F);
end;
procedure p2;
var s:string;
T:TMemoryStream;
begin
try
T:=TMemoryStream.Create;
T.LoadFromFile("data.mpq");
except
Application.MessageBox(pchar(SysErrorMessage(GetLastError)),"er",MB_OK);
end;
T.Free;
end;
Файл существует.
В нем записаны строки текста.
Когда файл незанят программа читает с него и выдает ShowMessage(первая строка).
Когда занят другой программой выдает ошибки:
В случае p1:
I/O Error 32
Процесс неможет получить доступ к файлу,т.к этот файл занять другим процессом
В случае p2:
Delphi пишет:
Project Project2.exe raised exception class EFOpenError with message
"Cannot open file "C:\......\data.mpq".Process stopped.
Use Step or Run to continue.
моя программа:
Процесс неможет получить доступ к файлу,т.к этот файл занять другим процессом
Может быть файл открыт(OpenFile) программой с парамаетрам OF_SHARE_EXCLUSIVE тл
как тогда быть?
HELP_HELP_HELP_HELP_HELPHELPMEHELPMEHELPME_HELP_ME
---------------------
-----------------------------------------------------
Перерисовать экрна- InvalidateRect(0,nil,true);
Pat (2003-06-16 19:51:00) [8]
>clickmaker © (16.06.03 18:56)
Титры что ли? :-)))
Логичней было бы f:file of byte
clickmaker (2003-06-16 18:56:00) [9]
Pat © (16.06.03 18:42)
Да и первый вариант работает...
Только вот, непонятно, с каких пор *.mpg стал текстовым файлом?
А там чел просто текст читает, без музыки, без видео...
Pat (2003-06-16 18:42:00) [10]
Да и первый вариант работает...
Только вот, непонятно, с каких пор *.mpg стал текстовым файлом?
Pat (2003-06-16 18:36:00) [11]
>Не то и не другое неработает
GetLastError вам многое скажет..и нам тоже...Есть подозрение, что Path not found
Специально потратил 1 минуту своего времени, чтобы проверить вариант №2, правда, файл был data.mp3. Все работает. Более того, пару дней назад читал таким способом из своего же exe"шника (т.е. paramstr(0))
Volcano (2003-06-16 18:23:00) [12]
Никак. Тем более если другая прога его постоянно переписывает!
sucer (2003-06-16 18:11:00) [13]Не то и не другое неработает
Вот еще что:Программа которая занимает файл постоянно в него что-то пишет
procedure p1; возникает ошибка
var s:string;
begin
FileMode:=0;
AssignFile(F,"data.mpq");ReSet(F);
Read(F,s);
ShowMessage("=>"+s);
CloseFile(F);
end;
procedure p2;Возникает ошибка .....Can"t open file "FileName".Process Stopped.....
var s:string;
( "data.mpq")Не то и не другое неработает
Вот еще что:Программа которая занимает файл постоянно в него что-то пишет
procedure p1; возникает ошибка
var s:string;
begin
FileMode:=0;
AssignFile(F,"data.mpq");ReSet(F);
Read(F,s);
ShowMessage("=>"+s);
CloseFile(F);
end;
procedure p2;Возникает ошибка .....Can"t open file "FileName".Process Stopped.....
var s:string;
T:TMemoryStream;
begin
T:=TMemoryStream.Create;
T.LoadFromFile("data.mpq");
T.Free;
end;
Pat (2003-06-16 12:59:00) [14]
>Как прочитать текстовой файл
>AssignFile(F,"data.mpq");
Прикольно :-))
>F:Text;
Тут я подумал, что это BP
>AssignFile(F,"data.mpq");
>CloseFile(F);
А тут - OP
>Как прочитать текстовой файл,если он занят другой програмой?
TMemoryStream.LoadFromFile()
Либо как ты делаешь, только перед Resеt"ом не забудь FileMode:=0
Cobalt (2003-06-16 08:52:00) [15]
Можно было бы, между прочим, и сказать - что именно"не работает".
В общем, смотрите Хелп, раздел "FileMode variable"