Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-86548
Думкин
2003-12-02 06:04
2003.12.26
С днем рождения! 2 декабря.


1-86379
Петрович
2003-12-15 14:02
2003.12.26
Проверить Edit.Text типа ВСЕ-ли цифры


3-86274
MicroWorld
2003-12-03 11:28
2003.12.26
настройка IB


3-86295
Просто гость
2003-12-01 23:40
2003.12.26
Из DataSet-а в таблицу


14-86513
euru
2003-11-12 15:37
2003.12.26
Виртуальные классы





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