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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■75338  Re[2]: SQLServer2000→2008R2 へのデータ以降
□投稿者/ 魔界の仮面弁士 -(2015/03/16(Mon) 21:28:59)
    2015/03/16(Mon) 21:53:28 編集(投稿者)

    No75337 (魔界の仮面弁士) に追記
    >> -2257.5999999999999 ⇒ -2257.6
    >> 546.29999999999995 ⇒ 546.3
    > バージョンが違うことで、文字列化したときに異なる値に見えてしまうだけで、
    > 実際には同じ値ということはないでしょうか。

    念のために試算。

    たとえば、float(24) の範囲で、「-2257.6」の近似値をバイナリ表現してみます。
    有効桁数 24 bit の 2 進小数で表すので、近傍値はこのあたりになります。

     (a) -100011010001.100110011000 → 10進数の -2257.599609375 に相当
     (b) -100011010001.100110011001 → 10進数の -2257.599853515625 に相当
     (c) -100011010001.100110011010 → 10進数の -2257.60009765625 に相当
     (d) -100011010001.100110011011 → 10進数の -2257.600341796875 に相当
     (e) -100011010001.100110011100 → 10進数の -2257.6005859375 に相当

    ※SQL Server の内部的には、おそらく「c」のバイナリで格納されると思います。


    一方、最大精度の float(53) が使われていたと仮定すると、
    有効桁数 53bit なので、このあたりですね。
     (x) -100011010001.10011001100110011001100110011001100110010
     (y) -100011010001.10011001100110011001100110011001100110011
     (z) -100011010001.10011001100110011001100110011001100110100

    上記の 2 進小数を 10 進小数に直してみると、こうなります。

     (X) -2257.5999999999994543031789362430572509765625
     (Y) -2257.59999999999990905052982270717620849609375
     (Z) -2257.600000000000363797880709171295166015625


    今回の「-2257.5999999999999」も「-2257.6」も、
    もっとも近い値は Y の値ですから、
    実際は両値とも、同じバイナリであると言えるでしょう。


    === 以下蛇足 ===

    上記だけ見ると、X と Y は 17 桁ぐらいの精度をもっているかのようにも
    見えますが、それはたまたたま、そういう数値域にあったというだけです。

    内部的には、最大でも「53 bit 分」の有効桁数しかありません。

    「53 bit」で表せる値の範囲は、符号無し10進整数で「0〜9007199254740991」の
    範囲です。すなわち約 15.9 桁が、最大精度ということですね。

    この15桁(53bit)の数値列に対し、何桁目に小数点を打つのかという形で
    値を管理しているのが、『浮動小数点型』である float(53)型 です。

    === 蛇足ここまで ===


    もしも、10 進数表記での誤差を抑える必要があるのなら、float ではなく、
    『固定小数点型』である decimal 型を使ってみてください。
    これならば誤差が出る心配はありません。

    元データが float 型である以上、今更型を変更してみたところで、
    既存のデータの誤差を解消できるわけではありませんが、
    今後の事を考えれば、データ型を見直すことも必要かと。
記事No.75335 のレス /過去ログ126より / 関連記事表示
削除チェック/

■78290  Re[4]: ウェブサイトから取得したHtmlソースの欠損
□投稿者/ くなーら -(2016/01/04(Mon) 20:42:38)
    遅れまして申し訳ありません。

    > 手元環境では、</html> まで表示されているようですが、「略されている」のですか?
    > 見た目が違うという話であれば、「右端で折り返す」が要因になりそうですが…、そういった単純な話ではないのですよね?

    はい。略されています。
    </html>タグが出力されており、間のコンテンツ部分が抜け落ちております。

    > source の Length プロパティはどのくらいですか?
    > 手元では 98455 でも表示されていました。

    Re[2]:本文中のソースを改めて出力テストを行いましたので、ご報告します。

    using (var res = (HttpWebResponse)req.GetResponse())
    using (var resSt = res.GetResponseStream())
    using (var sr = new StreamReader(resSt, Encoding.UTF8))
    {
    //検証用に出力
    string source = sr.ReadToEnd();
      this.txtHeadleine.Text = source;
    Console.WriteLine(sr.ReadToEnd());//@
    Console.WriteLine(this.txtHeadleine.Text);//C
    }
    から、「//検証用に出力」コメント以下を下記に書き換え。

    source = sr.ReadToEnd();
    this.txtHeadleine.Text = source;
    Console.WriteLine(sr.ReadToEnd()+"@");
    Console.WriteLine(source + "A");
    Console.WriteLine(source.Length + "B");
    Console.WriteLine(this.txtHeadleine.Text.Length + "C");
    source = source.Replace("\r\n", "\r").Replace("\n", "\r").Replace("\r", "\r\n");
    Console.WriteLine(source.Length + "D");

    結果は下のキャプチャです。
    https://gyazo.com/aab3dc9942996004c2f6b4093db77919
    @はただ"@"のみが出力され、Aは欠損無く全てのHtmlソースが出力されました。

    なおテキストビジュアライザーで表示時は、492行31786文字となりました。下キャプチャにチェッカーの結果。
    https://gyazo.com/094ec0498cfe5cc987eb940d68001b42

    下記キャプチャは、テキストビジュアライザーで表示されたHtmlソースと、
    出力ウィンドウに表示されたHtmlソースを比較した結果です。
    https://gyazo.com/3b690241a4bd37a9849866203b7fd238
    https://gyazo.com/791902ae9248b127b0c020cbe5a14f83

    JavaScriptのロジックが途中で堂々ぶつ切りになっているので、
    コンテンツタグだけ消すといった器用なことはしていないみたいですね......

    /*
    関係無いかと思われますが、Htmlビジュアライザーでは同様の問題は起きないみたいです。
    初期表示時は一部のみ表示されますが、↓
    https://gyazo.com/a7fb8c1d5518c787fbf7ff850d951662
    少し時間が経つと全コンテンツが表示される↓
    https://gyazo.com/1aa082b8aae7b86ad17e9326ecc570fe
    */

    ・ビジュアライザーに問題がある
    ・使用しているビジュアライザーのみ問題がある
    ・ウェブアイトに問題がある
    ・取得の仕方に問題がある
    ・そういう仕様
    ぱっと私が思いつく可能性はこれくらいです。
    収拾がつかなさそうなので、ここで解決済みとさせて頂きますが、今後も調査をする次第ではあります。
    (とはいっても、他のポータルサイト等を引っ張って出方を見るとか、
    ぶつ切りになる境界値を調べるくらいしかとっかかりがありませんが......)

    お知恵を貸して頂き、ありがとうございました。
記事No.78280 のレス / END /過去ログ132より / 関連記事表示
削除チェック/

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

    分類:[.NET 全般] 

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

    Using、Disposeを使ってMailkitのソースを作ることは可能なのでしょうか。
    また、どのプロセスで使用されているか調べる方法ありましたら教えてください。
親記事 /過去ログ165より / 関連記事表示
削除チェック/

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

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

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

    今回の書き方は「Mailkit Using」で検索すれば
    出てくると思います。
記事No.95166 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95176  Re[2]: テキストファイルにアクセスできない
□投稿者/ 工場プログラマー -(2020/06/29(Mon) 11:12:16)
    No95167 (furu さん) に返信
    > タスクマネージャーにメール送信したVB2019プログラムはありませんか?
    > それを止めても削除できませんか?

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

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

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

    Nugetパッケージの開放とかってできるのでしょうか?
記事No.95166 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95179  Re[3]: テキストファイルにアクセスできない
□投稿者/ furu -(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);
記事No.95166 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95181  Re[4]: テキストファイルにアクセスできない
□投稿者/ 工場プログラマー -(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

    こんな感じでソース作ったらうまくいきました。
    本当に助かりました。ありがとうございました!
記事No.95166 のレス / END /過去ログ165より / 関連記事表示
削除チェック/

■95182  Re[5]: テキストファイルにアクセスできない
□投稿者/ furu -(2020/06/29(Mon) 13:44:24)
    No95181 (工場プログラマー さん) に返信
    > stream.Dispose()
    > smtp.Dispose()
    Usingは確実にDisposeするための機能なので
    Using使う場合、これらのDispose()は必要ありません。
記事No.95166 のレス / END /過去ログ165より / 関連記事表示
削除チェック/

■95185  Re[6]: テキストファイルにアクセスできない
□投稿者/ 工場プログラマー -(2020/06/29(Mon) 16:31:31)
    2020/06/29(Mon) 16:31:54 編集(投稿者)

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

    分かりました。訂正しておきます。
記事No.95166 のレス / END /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -