ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 02:29

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 10 件の記事 ] 
作成者 メッセージ
 記事の件名: DeleteFile
投稿記事Posted: 2016年9月28日(水) 19:51 
オフライン

登録日時: 2016年9月24日(土) 15:35
記事: 62
DeleteFile ( "C:\a\a.txt" )

フォルダーとファイル、どちらも削除できるようにするにはどうすればいいでしょうか?


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年9月29日(木) 01:09 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 215
お住まい: 東京都
処理方法として
まず該当ディレクトリー内をWIN32 API FindFirstFileでファイルを検索します
エラーになるまで以下の①と②の処理を繰り返します
 ①WIN32 API DeleteFileでファイルを削除します
 ②WIN32 API FindNextFileで次のファイルを検索します
WIN32 API FindCloseで該当ディレクトリーをクローズします
WIN32 API RemoveDirectoryで空のディレクトリーを削除します
以上です


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年9月30日(金) 21:06 
オフライン

登録日時: 2016年9月24日(土) 15:35
記事: 62
do
alls = DeleteFile ( A & "")
FindNextFile
loop on error go to

"FindNextFile" のパラメータ指定が間違っています

となってしまうのですが・・・


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年10月06日(木) 21:52 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 215
お住まい: 東京都
上記の件のサンプルです。

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のヘルプに載っていると思いますのでご確認下さい。


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年10月10日(月) 21:49 
オフライン

登録日時: 2016年9月24日(土) 15:35
記事: 62
削除対象フォルダーの中にフォルダーが入っていると、削除できないのですが、どうすればいいですか?


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年11月12日(土) 18:16 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
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 If
pFromには、Ex文字列で、最後に\0を付け足す必要があります。この例だとD:\にあるaを削除しようとしています。


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年11月13日(日) 11:02 
オフライン

登録日時: 2016年9月24日(土) 15:35
記事: 62
コード:
Dim A1 As string
fos.pFrom = Ex A1
にするとエラーが発生してしまいます。


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年11月13日(日) 21:35 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 215
お住まい: 東京都
引用:
コード:
Dim A1 As string
fos.pFrom = Ex A1
にするとエラーが発生してしまいます。
Ex表記について変数には使用できません。
ABのヘルプを確認してみてください。
なので下記の様な記載で問題ないと思いますが
fos.pFrom = Ex"D:\\a\0"


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年11月13日(日) 22:45 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
そうですね。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


通報する
ページトップ
 記事の件名: Re: DeleteFile
投稿記事Posted: 2016年11月14日(月) 22:49 
オフライン

登録日時: 2016年9月24日(土) 15:35
記事: 62
たかせ様
イグトランス様

本当にご協力ありがとうございます。
皆様のおかげでいろいろな知識が蓄えられました!


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 10 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot], Bing [Bot] & ゲスト[21人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean