ab.com コミュニティ https://www.activebasic.com/forum/ |
|
DeleteFile https://www.activebasic.com/forum/viewtopic.php?t=4594 |
ページ 1 / 1 |
作成者: | TISAproject [ 2016年9月28日(水) 19:51 ] |
記事の件名: | DeleteFile |
DeleteFile ( "C:\a\a.txt" ) フォルダーとファイル、どちらも削除できるようにするにはどうすればいいでしょうか? |
作成者: | たかせ [ 2016年9月29日(木) 01:09 ] |
記事の件名: | Re: DeleteFile |
処理方法として まず該当ディレクトリー内をWIN32 API FindFirstFileでファイルを検索します エラーになるまで以下の①と②の処理を繰り返します ①WIN32 API DeleteFileでファイルを削除します ②WIN32 API FindNextFileで次のファイルを検索します WIN32 API FindCloseで該当ディレクトリーをクローズします WIN32 API RemoveDirectoryで空のディレクトリーを削除します 以上です |
作成者: | TISAproject [ 2016年9月30日(金) 21:06 ] |
記事の件名: | Re: DeleteFile |
do alls = DeleteFile ( A & "") FindNextFile loop on error go to "FindNextFile" のパラメータ指定が間違っています となってしまうのですが・・・ |
作成者: | たかせ [ 2016年10月06日(木) 21:52 ] |
記事の件名: | Re: DeleteFile |
上記の件のサンプルです。 CONST CRLF = EX"\r\n" DIM ACCSBYTE AS DWord DIM DAT AS WIN32_FIND_DATA DIM HFILED AS HANDLE DIM PATH[255] AS Char HFILED = FindFirstFile("D:\APPLTEST\A\*.TXT",DAT) DO IF HFILED = INVALID_HANDLE_VALUE THEN MessageBox(NULL,"削除データがありませんでした。","TEST",MB_OK) EXIT DO END IF lstrcpy(PATH,"D:\APPLTEST\A\") lstrcat(PATH,DAT.cFileName) IF DeleteFile(PATH) = 0 THEN MessageBox(NULL,"DeleteFileエラー発生しました。","TEST",MB_OK) ELSE lstrcat(PATH,"を削除しました。") MessageBox(NULL,PATH,"TEST",MB_OK) END IF LOOP UNTIL FindNextFile(HFILED,DAT) = 0 FindClose(HFILED) RemoveDirectory("D:\APPLTEST\A") MessageBox(NULL,"処理終了しました。","TEST",MB_OK) END WIN32 APIについての詳細はABのヘルプに載っていると思いますのでご確認下さい。 |
作成者: | TISAproject [ 2016年10月10日(月) 21:49 ] |
記事の件名: | Re: DeleteFile |
削除対象フォルダーの中にフォルダーが入っていると、削除できないのですが、どうすればいいですか? |
作成者: | イグトランス [ 2016年11月12日(土) 18:16 ] |
記事の件名: | Re: DeleteFile |
API関数のSHFileOperationを使うと、ファイル・フォルダの区別無く、またフォルダの中にファイルがあっても削除できます。 コード: #console Dim fos As SHFILEOPSTRUCT fos.wFunc = FO_DELETE fos.pFrom = Ex"D:\\a\0" fos.fFlags = FOF_SILENT Or FOF_NOCONFIRMATION Or FOF_NOERRORUI If SHFileOperation(fos) = 0 And fos.fAnyOperationsAborted = FALSE Then Print "削除しました。" Else Print "削除できませんでした。" End IfpFromには、Ex文字列で、最後に\0を付け足す必要があります。この例だとD:\にあるaを削除しようとしています。 |
作成者: | TISAproject [ 2016年11月13日(日) 11:02 ] |
記事の件名: | Re: DeleteFile |
コード: Dim A1 As string fos.pFrom = Ex A1にするとエラーが発生してしまいます。 |
作成者: | たかせ [ 2016年11月13日(日) 21:35 ] |
記事の件名: | Re: DeleteFile |
引用: コード: Dim A1 As string fos.pFrom = Ex A1にするとエラーが発生してしまいます。 ABのヘルプを確認してみてください。 なので下記の様な記載で問題ないと思いますが fos.pFrom = Ex"D:\\a\0" |
作成者: | イグトランス [ 2016年11月13日(日) 22:45 ] |
記事の件名: | Re: DeleteFile |
そうですね。Ex文字列では、直接ソースコードに書く以外の方法で使いづらいのでした。 Ex"\0"以外の方法(String型変数に対して使える方法)としてChr$(0)を連結する方法があります。こうするのはどうでしょうか。 コード: #console Dim A1 As String A1 = "T:\a" Dim deletePath As String deletePath = A1 + Chr$(0) Dim fos As SHFILEOPSTRUCT fos.wFunc = FO_DELETE fos.pFrom = StrPtr(deletePath) fos.fFlags = FOF_SILENT Or FOF_NOCONFIRMATION Or FOF_NOERRORUI If SHFileOperation(fos) = 0 And fos.fAnyOperationsAborted = FALSE Then Print "削除しました。" Else Print "削除できませんでした。" End If |
作成者: | TISAproject [ 2016年11月14日(月) 22:49 ] |
記事の件名: | Re: DeleteFile |
たかせ様 イグトランス様 本当にご協力ありがとうございます。 皆様のおかげでいろいろな知識が蓄えられました! |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |