Форум: "Основная";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с доступом к файлу после 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c