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

Вниз

Удаление файла   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.021 c
2-1192988502
Stella
2007-10-21 21:41
2007.11.18
Моделирование движения зарядов


15-1192545752
Tirael
2007-10-16 18:42
2007.11.18
кто нибудь использовал mhdd?


15-1192080680
vanya_d
2007-10-11 09:31
2007.11.18
Где купить эти книги?


15-1192303418
ProgRAMmer Dimonych
2007-10-13 23:23
2007.11.18
Вопрос по русскому языку


15-1192174784
stupka_s
2007-10-12 11:39
2007.11.18
UTF8, String, WideString