Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
ВнизУдаление файла Найти похожие ветки
← →
DimOk © (2007-10-25 16:06) [0]Добрый день всем. Возникла сложность с "программным" удалением файлов. Есть некая программа, которая читает данные из файла, после выполнения некоторых действий эта программа должна его перенести в другой каталог. (чтение данных проиходит из файла формата *.dbf)
TableDoc.SQL.Text := "select * from " + FileName;
try
TableDoc.Active := True;
except
ShowMessage("Файл " + FileName + " поврежден или имеет неизвестный формат!");
end;
if TableDoc.Active = True then begin
..........
end;
// Собственно та часть которая должна удалять файл
TableDoc.Active := False;
CopyFile(OldFile,NewFile,True);
if DeleteFile(OldFile) then begin
MessageDlg("Файла удален", mtInformation, [mbOk], 0);
end;
Файл копируется но не удаляется, пытался ставить на него разрешения типа: Всем-Всё но результат нулевой. Подскажите пожалуйсто как можно реализовать удаление файла.
← →
Palladin © (2007-10-25 16:10) [1]хм... TableDoc.Active:=False ни разу не гарантирует закрытие хэндла открытого файла...
← →
DimOk © (2007-10-25 16:12) [2]
> хм... TableDoc.Active:=False ни разу не гарантирует закрытие
> хэндла открытого файла...
У меня это хозяйство в цикле вертится...... и в качестве FileName передается следующий найденый файл в каталоге, надо Free делать..... :(
← →
Reindeer Moss Eater © (2007-10-25 16:23) [3]GetlastError знает почему файл не удаляется
← →
clickmaker © (2007-10-25 16:30) [4]
> "Файла удален"
надо писать "Файло удалено"
← →
DimOk © (2007-10-25 16:32) [5]
> надо писать "Файло удалено"
Это для себя, для проверки..... :))
← →
DimOk © (2007-10-25 16:36) [6]
> GetlastError знает почему файл не удаляется
Ни чего не показывает:
1. Я ей раньше не пользовался и что то не правильно сделал;
2. Возможно это Vista;
3. Возможен 1 и 2 вариант. :)
← →
Reindeer Moss Eater © (2007-10-25 16:39) [7]Ни чего не показывает
не показывает?
тогда может хоть рассказывает?
← →
clickmaker © (2007-10-25 16:39) [8]
> Ни чего не показывает
быть не может
Win32Check(Windows.DeleteFile(OldFile)) что показывает?
← →
DimOk © (2007-10-25 16:44) [9]
> Win32Check(Windows.DeleteFile(OldFile))
"Синтаксическая ошибка в имени файла, имени папки или метке тома"
← →
clickmaker © (2007-10-25 16:45) [10]
> Синтаксическая ошибка в имени файла
и как оно выглядит?
← →
Reindeer Moss Eater © (2007-10-25 16:45) [11]осталось сделать ShowMessage(OldFile)
← →
DimOk © (2007-10-25 16:48) [12]
> и как оно выглядит?
> осталось сделать ShowMessage(OldFile)
Даа.... Действительно лажа какая то после:
tmp_str := cDir + FileName;
OldFile := PChar(tmp_str);
OldFile = "иЗQ"#2#1 :)
← →
DimOk © (2007-10-25 17:05) [13]
> OldFile = "иЗQ"#2#1
Это я исправил, а Win32Check(Windows.DeleteFile(OldFile)) показывает следующее:
"Процесс не может получить доступ к файлу, так как этот файл занят другим процессом"
← →
Reindeer Moss Eater © (2007-10-25 17:06) [14]и ты конечно же этому не веришь
← →
DimOk © (2007-10-25 17:11) [15]
> и ты конечно же этому не веришь
а куда деваться то....
← →
Reindeer Moss Eater © (2007-10-25 17:15) [16]try
TableDoc.Active := True;
except
ShowMessage("Файл " + FileName + " поврежден или имеет неизвестный формат!");
end;
Гы.
А если не поврежден и имеет известный формат, но уже открыт эксклюзивно? Или если нет такого файла?
← →
DimOk © (2007-10-25 17:18) [17]
> Гы.
> А если не поврежден и имеет известный формат, но уже открыт
> эксклюзивно? Или если нет такого файла?
Ну это уже........ Разве это относиться к тому что я спрашиваю... :)
← →
Reindeer Moss Eater © (2007-10-25 17:19) [18]Про то, о чем ты спрашивал тебе уже ответили.
← →
DimOk © (2007-10-25 17:23) [19]
> Про то, о чем ты спрашивал тебе уже ответили.
Наверное ответ, где то очень глубоко спрятан... :) Прям шарада какая то... буду искать... Спасибо.
← →
Reindeer Moss Eater © (2007-10-25 17:23) [20]Файл занят, чего еще искать-то?
← →
DimOk © (2007-10-25 17:25) [21]
> Файл занят, чего еще искать-то?
Я не пойму чем он занят TADOQuery его держит или CopyFile(OldFile,NewFile,True) .....?
Как его "освободить" тогда..... :(
← →
Dennis I. Komarov © (2007-10-25 17:31) [22]> [21] DimOk © (25.10.07 17:25)
Да кто тебе сказал, что TADOQuery работает прям вот с файлом? :)
← →
DimOk © (2007-10-25 17:31) [23]Вообщето ешо держит TADOQuery потомучто я до этого делал просто MoveFile(OldFile, NewFile) и результат был тот же - нулевой.
← →
DimOk © (2007-10-25 17:34) [24]
> Да кто тебе сказал, что TADOQuery работает прям вот с файлом?
>
Я не говорю что напрямую берет и открывает файл на чтение или на запись, кроме этого FileName в программе ни где больше не используется, кроме как в формирование строки SQL... кроме того сошлюсь на ... [1]
← →
Dennis I. Komarov © (2007-10-25 17:41) [25]> [24] DimOk © (25.10.07 17:34)
Ну и отсюда вывод какой должен быть?
← →
DimOk © (2007-10-25 17:43) [26]
> Ну и отсюда вывод какой должен быть?
У меня был один вариант, но он не прокатывает:
TableDoc.Active := False;
TableDoc.Free;
CopyFile(OldFile,NewFile,True);
if DeleteFile(OldFile) then begin
MessageDlg("Файла успешно удален", mtInformation, [mbOk], 0);
end;
← →
DimOk © (2007-10-25 17:51) [27]А может это SearchRec при поиске файла.......?
← →
Dennis I. Komarov © (2007-10-25 17:57) [28]> [27] DimOk © (25.10.07 17:51)
Мимо!
← →
sniknik © (2007-10-25 17:58) [29]нет, это провайдер данных... если ты используешь провайдер VFP конечно (а то боюсь до этого никогда не дойдешь, о исходной инфе по используемому, а людям может быть интересно)
← →
DimOk © (2007-10-25 18:00) [30]
> если ты используешь провайдер VFP конечно
Точно в цель, и как выйти из этого положения....
← →
Dennis I. Komarov © (2007-10-25 18:04) [31]> [30] DimOk © (25.10.07 18:00)
Удалять, пока не надоест :) Или провайдер в связи того, что устал соизволит оставить файл в покое :)
← →
DimOk © (2007-10-25 18:06) [32]
> Удалять, пока не надоест :) Или провайдер в связи того,
> что устал соизволит оставить файл в покое :)
А если серьезно.... ?:)
← →
sniknik © (2007-10-25 18:10) [33]ну, можно например не использовать...
а вообще откуда я знаю как выйти из "этого положения" если не знаю что ты делаешь, смысл, и собственно само положение...
вижу что ты захватываешь файл одним, и тут же пытаешься удалить его другим... это "положение"? или может так и надо, так и задумывалось. (не видно отсюда это глюк, ошибка логике или чтото другое...)
> А если серьезно.... ?:)
только в ответ. будет серьезный вопрос, будет такой же ответ. (попозже, а то рабочий день кончился)
← →
Anatoly Podgoretsky © (2007-10-25 19:19) [34]> Dennis I. Komarov (25.10.2007 18:04:31) [31]
Ты слышал как китайцы ломали сайт Пентагона?
После 953178657 попытки сервер согласился, что пароль доступа Мао Дзе Дун
← →
Anatoly Podgoretsky © (2007-10-25 19:20) [35]
> except
> ShowMessage("Файл " + FileName + " поврежден или имеет
> неизвестный формат!");
> end;
Возьми за правило - никогда так не делать.
← →
Anatoly Podgoretsky © (2007-10-25 19:21) [36]
> CopyFile(OldFile,NewFile,True);
И так тоже.
← →
DimOk © (2007-10-26 08:45) [37]
> > except
> > ShowMessage("Файл " + FileName + " поврежден или
> имеет
> > неизвестный формат!");
> > end;
>
> Возьми за правило - никогда так не делать.
> > CopyFile(OldFile,NewFile,True);
>
> И так тоже.
Буду благодарен за пояснение.... :)
А на счет удаления у меня получилось! :) Спасибо всем кто помогал и направил на путь истинный, в частности отдельная длягодарность sniknik - Большое спасибо!
← →
Reindeer Moss Eater © (2007-10-26 09:46) [38]Буду благодарен за пояснение.... :)
except
> > ShowMessage("Файл " + FileName + " поврежден или
> имеет
> > неизвестный формат!");
> > end;
такая обработка исключений примерно эквивалентна такой:
except
ShowMessage("Я как программист не знаю, и не хочу знать, что именно произошло и в чем причина ошибки, но это еще не все. Я еще и вам как пользователям не дам узнать истинную причину возникшего отказа.");
end;
← →
DimOk © (2007-10-26 09:50) [39]а по поводу CopyFile(OldFile,NewFile,True); ...?
← →
DimOk © (2007-10-26 09:51) [40]
> ShowMessage("Я как программист не знаю, и не хочу знать,
> что именно произошло и в чем причина ошибки, но это еще
> не все. Я еще и вам как пользователям не дам узнать истинную
> причину возникшего отказа.");
А это я поправлю, это же черновой набросок - можно так сказать..... :)
← →
Reindeer Moss Eater © (2007-10-26 09:55) [41]А это я поправлю, это же черновой набросок - можно так сказать..... :)
смысл в том, что при таком черновом наброске не знаешь что именно произошло. лучше вообще убрать такую обработку.
И дефолтный обработчик приложения даст куда более информативное и полезное сообщение.
← →
DimOk © (2007-10-26 09:59) [42]
> смысл в том, что при таком черновом наброске не знаешь что
> именно произошло. лучше вообще убрать такую обработку.
> И дефолтный обработчик приложения даст куда более информативное
> и полезное сообщение.
С этим я разбирусь. Меня интересует высказывание [36]
← →
Reindeer Moss Eater © (2007-10-26 10:01) [43]в 36 примерно то же самое.
CopyFile функция. Она возвращает результат. Тебе возвращает.
А ты его игнорируешь.
← →
Dennis I. Komarov © (2007-10-26 10:04) [44]> [34] Anatoly Podgoretsky © (25.10.07 19:19)
И все это время они логинились с одинаковым паролем? :)))))
← →
DimOk © (2007-10-26 10:05) [45]
> в 36 примерно то же самое.
> CopyFile функция. Она возвращает результат. Тебе возвращает.
>
> А ты его игнорируешь.
Все понятно. Спасибо! Просто у меня сегодня выходит триальный срок использования CodeGear RAD Studio Delphi for Win32 и поэтому я торопился как можно больше реализовать или понять - почему не получается. Как говориться -" Поспешишь - людей насмешишь" :)
← →
DimOk © (2007-10-26 10:31) [46]
> смысл в том, что при таком черновом наброске не знаешь что
> именно произошло. лучше вообще убрать такую обработку.
> И дефолтный обработчик приложения даст куда более информативное
> и полезное сообщение.
Пришлось так сделать потому, что весь дальнейший код вклячая эту обработку исключений находиться в секции try запуска приложения в качесве OLE сервера, и по этому дефолтный обработчик приложения не срабатывает, а срабатывает except относящийся к попытке запуска OLE приложения-сервера. Поэтому все эти обработки исключения я думаю убрать вообще эти обработки исключений и пользоваться лиш if ... then или case of..... :)
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.042 c