Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1193161764
(MiTch)
2007-10-23 21:49
2007.11.18
Упорядоченный динамический список Help Please


15-1191588720
Vlad Oshin
2007-10-05 16:52
2007.11.18
Шахматы. Система Тайманова в сицилианской


3-1183991425
rule
2007-07-09 18:30
2007.11.18
подскажиет как вызвать диалог ADO выбора провайдера и настройки


9-1162551661
megabyte-ceercop
2006-11-03 14:01
2007.11.18
Попинайте дему


2-1193340284
Ega23
2007-10-25 23:24
2007.11.18
подскажите пример работы с TXMLDocument





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