Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

Помогите разобраться с доступом к файлу после MkDir.   Найти похожие ветки 

 
Vlad25   (2003-12-09 20:20) [0]

В общем проблема такая: не могу получить доступ к файлу после команды MkDir().
Я пишу: MkDir(...)
потом
AssignFile(...) //файл находится НЕ в новой папке.
Reset(...) на этой строчке появляется ошибка I/O 183 (невозможно создать файл, т.к. он уже существует).
Если я не использую MkDir, то ошибки не возникает. Что нужно сделать, чтобы ошибки не возникало и после MkDir?


 
Diablo   (2003-12-09 23:21) [1]

Приведи код поподробнее, особенно что стоит вместо (...)


 
Vlad25   (2003-12-10 12:00) [2]

Ладно, доверил такое ответственное дело, как создание этой папки, инсталлятору:)
Но уже самому интересно, почему возникал это глюк. Так что, если нужно поподробнее код...

if [программа запускается в первый раз]=true then MkDir
Для нормальной работы программы ей требуется папка, о которой юзеры не должны знать (типа где-нибудь в CommonFiles\....). Во время первого запуска ее еще нет.
Потом идет код для доступа к файлам, находящимся уже в папке самой программы(разные файлы данных). MkDir выполняется только 1 раз при первом запуске. При следующих запусках эта команда не выполняется.


 
Diablo   (2003-12-10 18:49) [3]

Не надо словами объяснять - как бы ты хотел сделать. Приведи реальный код, начиная от MkDir.


 
Vlad25   (2003-12-11 11:49) [4]

uses
...
function GetWDir: string;
procedure RealizeLength(var S: String);
implementation

{$R *.dfm}
{------------------------------------------------------------}
function GetWDir;
var
S: String;
begin
SetLength(S,256);
GetWindowsDirectory(Pchar(S),256);
RealizeLength(S);
Result:=s;
end;
{------------------------------------------------------------}
procedure RealizeLength(var S: String);
begin
SetLength(S, StrLen(PChar(S)));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
path,s1: String;
adm: textFile;
i: integer;
begin
s1:=GetWDir;
for i:=1 to 3 do path:=path+s1[i];
path:=path+"Program Files\Common Files\ordtst";
MkDir(path);
try
AssignFile(Adm,"admin.txt"); {admin.txt-файл, находящийся в папке прогрыммы}
Reset(adm); {у меня ошибка появляется на этой строке}

finally
CloseFile(adm);
end;
end;


 
Романов Р.В. ©   (2003-12-11 12:03) [5]

AssignFile(Adm," Полное имя файла (с каталогом)");


 
Vlad25   (2003-12-11 15:37) [6]

Ошибка не исчезла после прописывания полного имени файла.


 
pasha_golub ©   (2003-12-11 15:55) [7]

2Vlad25
После команды МкДир текущий каталог меняется и прогамма ищет твой админ.тхт в только что созданной папке. Поэтому:

AssignFile(GetFileFolder(Application.ExeName)+"/admin.txt");


 
pasha_golub ©   (2003-12-11 15:56) [8]

Пардон

AssignFile( adm,GetFileFolder(Application.ExeName)+"/admin.txt");


 
pasha_golub ©   (2003-12-11 15:57) [9]

Еще один пардон. Слеш надо бы поменять :-)


 
Jel ©   (2003-12-11 15:58) [10]


> pasha_golub © (11.12.03 15:55) [7]
> 2Vlad25
> После команды МкДир текущий каталог меняется и прогамма
> ищет твой админ.тхт в только что созданной папке.


Готов спорить. Сам об этом подумал и не поленился проверить.

ShowMessage(GetCurrentDir);
MkDir("c:\abcdef");
ShowMessage(GetCurrentDir);


попробуйте прогнать.


 
pasha_golub ©   (2003-12-11 16:10) [11]

2Jel
Да уж. Действительно грабли. Я поторопился с выводами.

Vlad25
Значит, нету у тебя файла такого :-)


 
pasha_golub ©   (2003-12-11 16:14) [12]

Ха, однако. А ну ка... У тебя этот файл в среде IDE случайно не открыт? :-)


 
Vlad25   (2003-12-11 19:15) [13]

А что такое среда IDE?


 
Vlad25   (2003-12-11 19:25) [14]

Извиняюсь за глупый вопрос. Нет, в среде IDE он у меня случайно не открыт :-)


 
panov ©   (2003-12-11 19:40) [15]

А вот этот кусок на предмет содержимого переменноpath проверить не хочешь? -

procedure TForm1.Button1Click(Sender: TObject);
var
path,s1: String;
adm: textFile;
i: integer;
begin
s1:=GetWDir;
for i:=1 to 3 do path:=path+s1[i];
path:=path+"Program Files\Common Files\ordtst";
MkDir(path);


 
Vlad25   (2003-12-11 20:29) [16]

Да вроде этот кусок еще не глючил. Если у меня папка виндовс C:\WINDOWS, то path="C:\Program Files\Common Files\ordtst".
И вообще, panov, можно вопрос немного поконкретнее? Что ты хочешь сказать?


 
app ©   (2003-12-11 20:32) [17]

Vlad25 (11.12.03 20:29) [16]
Это неверно, это у тебя так, а голову на отсечение хочешь дать, что и остальных также?


 
panov ©   (2003-12-11 20:58) [18]

Так ты откуда этот "path" берешь?
Подумай...


 
Германн ©   (2003-12-12 03:51) [19]

Что самое интересное - (Vlad25 (11.12.03 20:29) [16]) - этот кусок никогда, ни у кого глючить не будет. А вот после MkDir(path) ... !?


 
Vlad25   (2003-12-12 10:48) [20]

Спасибо, (panov © (11.12.03 20:58)[18]). Если брать этот path из реестра (HKLM\Software\Microsoft\Windows\CurrentVersion, ключ CommonFilesDir), то ошибки не возникает. Еще раз спасибо :-)


 
chs2r ©   (2003-12-12 11:46) [21]

>try
>AssignFile(Adm,"admin.txt"); {admin.txt-файл, находящийся в >папке прогрыммы}
>Reset(adm); {у меня ошибка появляется на этой строке}

>finally
>CloseFile(adm);
>end;

это если файл даже не открылся, а закрывается все равно?
а здесь нет ли ошибки?



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

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
14-86513
euru
2003-11-12 15:37
2003.12.26
Виртуальные классы


1-86377
sokohigh
2003-12-10 16:11
2003.12.26
(Глубина визуальн.наследования >3) = (Delphi7 умирает)


3-86267
Andriy Tysh
2003-12-03 10:29
2003.12.26
Master-Detail


14-86501
Карелин Артем
2003-12-04 14:33
2003.12.26
Что может висеть на 7000 порту?


1-86346
LastLamer
2003-12-12 15:55
2003.12.26
TreeView, exchange nodes