C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

テキストファイルにアクセスできない

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■95166 / inTopicNo.1)  テキストファイルにアクセスできない
  
□投稿者/ 工場プログラマー (26回)-(2020/06/26(Fri) 16:52:40)

分類:[.NET 全般] 

VB2019です。
前回と立て続けに同じような質問ですいません。
Mailkitを使用して、読み取り専用テキストファイルを添付して送信した後、
ファイルを削除しようとしているのですが、例外が発生して削除出来ません。
別のプロセスで使用されているため、アクセスできないといわれているんですが、
タスクマネージャーを見てもテキストファイルはありませんし、いろいろ試しているんですがいまだにわかりません。

Using、Disposeを使ってMailkitのソースを作ることは可能なのでしょうか。
また、どのプロセスで使用されているか調べる方法ありましたら教えてください。

引用返信 編集キー/
■95167 / inTopicNo.2)  Re[1]: テキストファイルにアクセスできない
□投稿者/ furu (60回)-(2020/06/26(Fri) 17:37:21)
No95166 (工場プログラマー さん) に返信
> タスクマネージャーを見てもテキストファイルはありませんし、いろいろ試しているんですがいまだにわかりません。
タスクマネージャーにメール送信したVB2019プログラムはありませんか?

それを止めても削除できませんか?

> Using、Disposeを使ってMailkitのソースを作ることは可能なのでしょうか。
Using, Disposeを理解しないと、今後同じようなところで
何度も躓くと思うので、勉強した方がいいいです。

今回の書き方は「Mailkit Using」で検索すれば
出てくると思います。
引用返信 編集キー/
■95176 / inTopicNo.3)  Re[2]: テキストファイルにアクセスできない
□投稿者/ 工場プログラマー (27回)-(2020/06/29(Mon) 11:12:16)
No95167 (furu さん) に返信
> タスクマネージャーにメール送信したVB2019プログラムはありませんか?
> それを止めても削除できませんか?

とりあえず、実行プログラムの***.exeをタスクの終了?で合ってるか分かりませんがしてみたところ出来ませんでした。

> Using, Disposeを理解しないと、今後同じようなところで
> 何度も躓くと思うので、勉強した方がいいいです。

すいません、元々Usingを実行するソースには使っていて、Disposeで解放もしてみたのですができなくて
メールを送る本文(タイトルの設定等)をUsingで設定することは可能なのか聞きたかったのです。
言葉足らずですいません。
ちなみにUsingで設定しようとするとIDisposableを使えとエラーが発生して、理解が追い付けません。

Nugetパッケージの開放とかってできるのでしょうか?
引用返信 編集キー/
■95179 / inTopicNo.4)  Re[3]: テキストファイルにアクセスできない
□投稿者/ furu (61回)-(2020/06/29(Mon) 12:20:26)
No95176 (工場プログラマー さん) に返信
> ちなみにUsingで設定しようとするとIDisposableを使えとエラーが発生して、理解が追い付けません。
申し訳ない。
「Mailkit Using」で検索しても
ちゃんとしたのはないですね。

添付ファイルのstreamはメール送信後に解放するようにしてください。

C#のサンプルです。

using (var stream = System.IO.File.OpenRead(filepath))
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
    smtp.Connect(host, port, MailKit.Security.SecureSocketOptions.Auto);
    smtp.Authenticate(ユーザーId, パスワード);

    var mail = new MimeKit.MimeMessage();
    mail.From.Add(new MimeKit.MailboxAddress("", from));
    mail.To.Add(new MimeKit.MailboxAddress("", to));
    mail.Subject = "テスト";

    var multipart = new MimeKit.Multipart("mixed");

    multipart.Add(new MimeKit.TextPart (MimeKit.Text.TextFormat.Plain){Text ="テストです"});

    var attachement = new MimeKit.MimePart("Application/Octet-Stream")
    {
        Content = new MimeKit.MimeContent(stream),
        ContentDisposition = new MimeKit.ContentDisposition(),
        ContentTransferEncoding = MimeKit.ContentEncoding.Base64,
        FileName = "テストファイル.txt",
    };

    multipart.Add(attachement);

    mail.Body = multipart;

    smtp.Send(mail);
}

System.IO.File.Delete(filepath);

引用返信 編集キー/
■95181 / inTopicNo.5)  Re[4]: テキストファイルにアクセスできない
□投稿者/ 工場プログラマー (28回)-(2020/06/29(Mon) 13:34:11)
2020/06/29(Mon) 13:40:14 編集(投稿者)
No95179 (furu さん) に返信
> 申し訳ない。
> 「Mailkit Using」で検索しても
> ちゃんとしたのはないですね。

自分が言葉足らずだっただけなのでお気になさらず。

Sub SendMail()
        Using stream = File.OpenRead(strFilePath)
            Using smtp = New MailKit.Net.Smtp.SmtpClient()

                smtp.Connect("smtp.alpha-prm.jp", 25)

                Dim mail = New MimeKit.MimeMessage()
                mail.From.Add(New MimeKit.MailboxAddress("***", "***@***"))
                mail.To.Add(New MimeKit.MailboxAddress("***", "***@***"))
                mail.Subject = "テスト"

                Dim textPart = New MimeKit.TextPart(MimeKit.Text.TextFormat.Plain) With {
                .Text = Format("テストです"
                }

                Dim attachment = New MimeKit.MimePart("Application/Octet-Stream") With {
               .Content = New MimeKit.MimeContent(stream),
            .ContentDisposition = New MimeKit.ContentDisposition(),
               .ContentTransferEncoding = MimeKit.ContentEncoding.Base64,
               .FileName = Path.GetFileName(strFilePath)
                }
                Dim multipart = New MimeKit.Multipart("mixed") From {
                    textPart,
                    attachment
                }

                mail.Body = multipart

                smtp.Send(mail)
                stream.Dispose()
                smtp.Dispose()
            End Using
        End Using
        File.Delete(strFilePath)
    End Sub
End Module

こんな感じでソース作ったらうまくいきました。
本当に助かりました。ありがとうございました!

解決済み
引用返信 編集キー/
■95182 / inTopicNo.6)  Re[5]: テキストファイルにアクセスできない
□投稿者/ furu (62回)-(2020/06/29(Mon) 13:44:24)
No95181 (工場プログラマー さん) に返信
> stream.Dispose()
> smtp.Dispose()
Usingは確実にDisposeするための機能なので
Using使う場合、これらのDispose()は必要ありません。
解決済み
引用返信 編集キー/
■95185 / inTopicNo.7)  Re[6]: テキストファイルにアクセスできない
□投稿者/ 工場プログラマー (29回)-(2020/06/29(Mon) 16:31:31)
2020/06/29(Mon) 16:31:54 編集(投稿者)

No95182 (furu さん) に返信
>> stream.Dispose()
>> smtp.Dispose()
> Usingは確実にDisposeするための機能なので
> Using使う場合、これらのDispose()は必要ありません。

分かりました。訂正しておきます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ