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

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

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

全過去ログを検索

<< 0 >>
■17549  Re[4]: VB6からの移行について(Basファイルについ
□投稿者/ ネタ好き -(2008/04/27(Sun) 00:20:31)
    No17548 (ナカ さん) に返信
    > >はつねさん
    > >ネタ好き さん
    >
    > さっそくのお返事、ありがとうございます。
    > お二人の意見から調べてみました。
    > この辺りの記事を参考にしてみました。
    > http://www.atmarkit.co.jp/fdotnet/dotnettips/248module/module.html
    >
    > これを読むと、「Public Modele」と宣言した場合、たしかにVB6と同じような感じで
    > 使用できるけど内部的にはすべてSharedとなっているという事でしょうか。
    > それであれば、わざわざModeleとする必要はありませんね。
    >
    > Usingですが、現在のクラスファイルにはIDisposableインターフェイスが組み込まれていません。
    > ところで、nothingとDisposeの違いは何なのでしょうか?Disposeが無い場合、nothingでも問題ない・・・?
    > 参考書などを見ていても、Newしているものの破棄の処理が書かれていないサンプルが多いように思えます。
    > 本当は破棄した方が良いのでしょうか?
    >
    > 追記質問で申し訳ありませんが、どうかよろしくお願いします。

    Connectionなどの今すぐ開放したいリソースを持つオブジェクトか、
    カーネルオブジェクトを持つと予想出来るオブジェクトにIDisposableインターフェイスを実装します。
記事No.17542 のレス /過去ログ35より / 関連記事表示
削除チェック/

■55764  Re[1]: resxに作成されるspread.Net2.5Jの値
□投稿者/ hiro -(2010/12/13(Mon) 18:20:06)
    hiroです。

    申し訳ありません、自己解決しました。
    どうもスプレッドデザイナ内の、
    SeriarizeModelsというプロパティがTrueになっていたため発生したようです。

    こんなプロパティを弄った記憶は全く皆無なのですが……。

    一応解決済みとさせていただきます。
記事No.55744 のレス / END /過去ログ93より / 関連記事表示
削除チェック/

■55765  Re[2]: どこに書かれているのかがわかりません。
□投稿者/ BAKU -(2010/12/13(Mon) 18:20:43)
    No55283 (よもやま さん) に返信
    >
    ありがとうございます!
    がんばってみます!
記事No.55270 のレス / END /過去ログ93より / 関連記事表示
削除チェック/

■77994  Re[1]: ライセンス認証について
□投稿者/ 魔界の仮面弁士 -(2015/12/06(Sun) 17:57:12)
    No77992 (澤田 さん) に返信
    > HDDのボリュームシリアルにて認証にしようと思うのですが、
    
    HDDシリアルではなく、ボリュームシリアルでしょうか?
    
    ボリュームシリアルというんは、コマンドプロンプトから
     DIR C:
    などを打ち込んだときに、
     ドライブ C のボリューム ラベルは LABELNAME です
     ボリューム シリアル番号は ****-**** です
    と表示される値のことですよね。
    
    であれば、こんな感じで取得できます。
    
    
    string drive = "C:";
    
    var diskInfo = new System.Management.ManagementObject(
      "Win32_LogicalDisk.DeviceId=\"" + drive + "\"");
    
    diskInfo.Get();
    
    string serialNumber = diskInfo["VolumeSerialNumber"].ToString();
    
    Console.WriteLine(serialNumber);
    
    
    
    > HDDのボリュームシリアルにて認証にしようと思うのですが、
    
    ボリュームシリアルは、それ単独では認証には向きません。
    
    たとえば、DOS4の場合、1995年12月26日 午後9時55分41秒94 にフォーマットされた場合、
    ボリュームシリアルは 3578-1D02 となりますが、これは下記の式によって算出されます。
    
     月日  12/26  0C 1A    時分  21:55  15 37
     秒数  41.94  29 5E    西暦   1995    07CB
     ----------------------    ----------------------
     合計         35 78    合計         1D 02
    
    
    このように、フォーマット処理を行ったときのタイムスタンプであることから、
    メーカー製 PC のように、ディスクイメージを複製してセットアップされた PC 群は、
    別の端末であっても、すべて同一の文字列を返すことが多いですし、それに
    再セットアップでフォーマットすると、別の文字列になってしまいますよね。
    
    
    > 後、何故か不正起動を想定して自分のIPを消した状態で起動させてみると
    > 本来は表示されるはずの警告も出ないのですが、根本的な書き方が間違っているのでしょうか(T_T)
    「自分のIPを消した状態」というのが何を指しているのか読み取れなかったのです、
    その消した状態で該当コードを『ステップ実行』し、それぞれの変数の内容が
    想定してある通りのものであるのか確認することで、問題点が見えてくるかと思います。
    
    
    
    > よろしければHDDボリュームシリアル等の修正点を書き直したものを記載していただけますととても助かります(T_T)
    それは質問ではなく、開発依頼ですよね。この掲示板では、その手の依頼は嫌われる傾向にあります。
    
    この掲示板では、(広告・宣伝は NG とはいえ)お仕事の依頼は禁止されていなかったと思いますが、
    開発相談ではなく開発依頼なら、開発依頼系の専門サイトや代行業者等に頼ったほうが良いと思います。
    
    
    
    一方で、自己努力の上でどうしてもできなったものについては、問題箇所を
    明確にした上で投稿すると、比較的具体的な回答が得られることが多いです。
記事No.77992 のレス /過去ログ132より / 関連記事表示
削除チェック/

■83861  Re[10]: フォルダー内のファイルリストを作成する方法
□投稿者/ わんちゃん -(2017/04/15(Sat) 13:58:47)
    2017/04/15(Sat) 14:00:11 編集(投稿者)
    2017/04/15(Sat) 13:59:34 編集(投稿者)

    <pre><pre>

    昔ながらの



    Dim buf As String
    buf = Dir(dirInfo.FullName & "\*.*")


    Do While buf <> ""
    filepath(cnt) = dirInfo.FullName & "\" & buf
    cnt = cnt + 1
    buf = Dir()

    Loop


    という方法も試してみましたが
    外付けHDDの場合には、
    buf = Dir(dirInfo.FullName & "\*.*")のところで数十秒フリーズしてしまうことが分かりました。

    あと、内蔵HDDであっても、


    上記のDir関数の方法と


    Dim files As IEnumerable(Of String) = Directory.EnumerateFiles(dirInfo.FullName, "*", SearchOption.AllDirectories)
    の方法だとわずかですがフリーズしてしまいます。



    Dim filepath As New List(Of String)
    Dim dirInfo As New DirectoryInfo(dirInfo0.FullName)

    Dim flEnum1 = dirInfo.EnumerateFiles
    Dim flEnum2 = flEnum1.GetEnumerator

    Dim cnt = 0
    Do While flEnum2.MoveNext

    cnt += 1
    Dim fi = flEnum2.Current
    filepath.Add(fi.FullName)
    Loop

    の方法だとフリーズしないことが分かりました。

    外付けHDDだと何が違うのでしょうか?
    ちなみに7200rpmで1TBの2.5inch HDDです。




    </pre></pre>
記事No.83842 のレス /過去ログ143より / 関連記事表示
削除チェック/

■92232  CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ YAMA -(2019/09/04(Wed) 10:14:34)

    分類:[C#] 

    VisualStudio2015  C# で開発中です。

    CD-Rを書き込みする機能が必要で
    CodeProjectのサイトを調べていたところ
    「Burning and Erasing CD/DVD/Blu-ray Media with C# and IMAPI2」
    https://www.codeproject.com/Articles/24544/Burning-and-Erasing-CD?fid=1134078&df=90&mpp=25&prof=True&sort=Position&view=Normal&spc=Relaxed&fr=326
    というものを見つけ、一通り必要そうな書き込み・消去等ができることは確認できました。

    1つ問題があり、困っています。

    @CD-Rにフォルダ+ファイルを書き込み(CDは閉じない)
    \CD
    |___[フォルダA] 
      ファイルB
      ファイルC

    という状態で作成しました。ここまでは問題ありませんでした。


    Aさらに追加で(上記サンプルでは同じフォルダAを2回書き込み形です)
    \CD
    |___[フォルダA] 
      ファイルB(変更あり)
      ファイルY
    というものを追記して

    【完成予想図】
    \CD
    |___[フォルダA] 
      ファイルB(変更あり)
      ファイルC
      ファイルY

    とういうディスクを作りたかったのですがフォルダAを2回目に書き込もうとしたところ、上記サンプルソース内の
    public bool AddToFileSystem(IFsiDirectoryItem rootItem)
    {
    try
    {
    rootItem.AddTree(m_directoryPath, true);
    return true;
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message, "Error adding folder",
    MessageBoxButtons.OK,
    MessageBoxIcon.Error);
    return false;
    }
    }

    という部分のcatchに引っ掛かり(フォルダ名は既に存在する)できませんでした。
    どうしたら既存フォルダがあってもお構いなしに追加できるのでしょうか?


親記事 /過去ログ159より / 関連記事表示
削除チェック/

■92233  Re[1]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ furu -(2019/09/04(Wed) 10:45:37)
    No92232 (YAMA さん) に返信
    CD-Rなんだから、追記しかできないと思う。
記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92234  Re[2]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ YAMA -(2019/09/04(Wed) 11:18:05)
    2019/09/04(Wed) 11:26:57 編集(投稿者)

    No92233 (furu さん) に返信
    > ■No92232 (YAMA さん) に返信
    > CD-Rなんだから、追記しかできないと思う。
    おっしゃる通り、「追記」しかできないですが、
    同名のデータが書き込まれる場合は元あったデータを「読めなくする」処理→別のエリアに新規に書き込みする(使用できるディスク容量はどんどん減っていく)ということをディスク内でしてくれてるのではないでしょうか?

    ちなみにフォルダではなくルート階層に同名のファイルで内容だけ変更したものを何度も書き込むことはできることは確認できております。
    なので質問の趣旨としては「同名フォルダはなぜダメなのか?回避策はないのか?」という点でお聞きした次第です。

    今回の書き込み操作を
    Windowsの標準機能でエクスプローラ上にドラッグして「書き込む準備ができました」状態→書き込みを行うと上記の目的としているフォルダ構造で完成します。
    ※空ディスクを初回入れたときに選択肢がでますが「USBのように使うモード」のほうは選択していません。
    市販のCD-R書き込みソフトでCDを閉じずに同様の書き込みを行っても完成しました。



記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92235  Re[3]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ とっちゃん -(2019/09/04(Wed) 11:28:56)

    Image Mastering API(CD/DVDを作るためのAPIセット)のリファレンスルートを張っておきますね。
    自分では、ISOファイル作成しか行ったことがないので、CD-R などの書き込みオンリー系の機能は使ったことがないので、細かくチェックしたことはありませんが
    なにか乗ってるかもしれません。

    https://docs.microsoft.com/en-us/windows/win32/imapi/portal

記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92236  Re[4]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ YAMA -(2019/09/04(Wed) 11:39:58)
    No92235 (とっちゃん さん) に返信
    >
    > Image Mastering API(CD/DVDを作るためのAPIセット)のリファレンスルートを張っておきますね。
    > 自分では、ISOファイル作成しか行ったことがないので、CD-R などの書き込みオンリー系の機能は使ったことがないので、細かくチェックしたことはありませんが
    > なにか乗ってるかもしれません。
    >
    > https://docs.microsoft.com/en-us/windows/win32/imapi/portal
    >
    >

    情報ありがとうございます。
    https://docs.microsoft.com/en-us/windows/win32/api/imapi2fs/nf-imapi2fs-ifsidirectoryitem-addtree

    翻訳しながら見てみましたが、IMAPI_E_DUP_NAME  名前がすでに存在します。
    このエラーですね。
    対策はわからず・・
    ちなみにCD-RWでも結果は同じでした。
    参考までに質問ですが、ISOファイルの場合は一度作ったものに対して同名フォルダを追記ということはされることはないのでしょうか?毎回新規に作り直すのであれば発生しないのかもしれませんが・・。
記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92238  Re[5]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ とっちゃん -(2019/09/04(Wed) 13:01:03)
    No92236 (YAMA さん) に返信
    > 参考までに質問ですが、ISOファイルの場合は一度作ったものに対して同名フォルダを追記ということはされることはないのでしょうか?毎回新規に作り直すのであれば発生しないのかもしれませんが・・。
    >
    ISOは、メディアイメージとしては、CD-ROM/DVD-ROM とリードオンリー形式にするので、毎回新規作成です。
    書き換え処理ができる構成(CD-R など)は試したことがないのでわかりません。
記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92237  Re[1]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ 魔界の仮面弁士 -(2019/09/04(Wed) 11:57:28)
    2019/09/04(Wed) 12:04:10 編集(投稿者)

    No92232 (YAMA さん) に返信
    > public bool AddToFileSystem(IFsiDirectoryItem rootItem)

    手元に環境が無いので試せませんが、エラーメッセージからすると
    rootItem[m_directoryPath] が既に存在している状態なので
    rootItem.AddTree(m_directoryPath, true); が失敗していたのかも。

    https://docs.microsoft.com/en-us/windows/win32/api/imapi2fs/nf-imapi2fs-ifsidirectoryitem-addtree

    EnumFsiItems を列挙して存在確認して、未登録の場合にのみ
    追加するという事はできないでしょうか。

    あとは AddTree ではなく、AddDirectory にしてみるとか…。
    (階層が深くなる場合は、再帰的に呼び出す必要がありそうですが)
記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92244  Re[2]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ YAMA -(2019/09/04(Wed) 14:55:32)
    rootItem.AddTree(m_directoryPath, false);
    これを
    rootItem.AddDirectory(m_directoryPath);
    に変更してみましたが、当該行で同じエラーが発生してしまいますね。


    魔界の仮面弁士様の案にありました
    EnumFsiItems を列挙して存在確認して、未登録の場合にのみ追加する
    という方法も考えたことがあったのですが、

    \CD
    |___[フォルダA]  @既存のためAddTreeしない
      ファイルB   Aここに出力
    という流れになるかとおもうのですがAの 指定フォルダの中に出力とい方法がわからず まだうまくいっていない状況です。
    まだサンプルを使いこなしてないのでもう少し自分でもあがいてみます。
記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92245  Re[3]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ 魔界の仮面弁士 -(2019/09/04(Wed) 15:06:05)
    2019/09/04(Wed) 15:07:40 編集(投稿者)

    No92244 (YAMA さん) に返信
    > \CD
    > |___[フォルダA]  @既存のためAddTreeしない
    >   ファイルB   Aここに出力
    > という流れになるかとおもうのですがAの 指定フォルダの中に出力とい方法がわからず

    使ったことが無いので、単なる予想コードですが:

    rootItem.AddDirectory(フォルダAパス);
    IFsiItem fiFolderA = rootItem[フォルダAパス];
    IFsiDirectoryItem fdiFolderA = fiFolderA as IFsiDirectoryItem;
    if (fdiFolderA != null)
    {
      fdiFolderA.AddFile(ファイルB, ストリーム);
    }
記事No.92232 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92258  Re[4]: CD-Rへ同名フォルダ書き込み時のエラー
□投稿者/ YAMA -(2019/09/05(Thu) 14:22:04)
    アドバイスありがとうございました。
    結論として、うまくできました。
    書き込みフォルダは作ってみる。既存であれば作らない。どちらにしても当該フォルダに同階層のファイルを追加。同階層内にあるフォルダは1階層下に潜り同様の処理を繰り返す。
    という流れでした。

    元が文頭のサンプルソースなうえ、量が多いため全部は書きませんが・・、

    rootItem.AddTree(指定フォルダパス, false); //書き込む[指定フォルダパス]フォルダ(同階層のファイル・サブフォルダ含む)を「新規追加」。※メディアに同名フォルダがあるとNG
    これを廃止し、

    @ rootItem.AddDirectory([指定フォルダ名]); //書き込む[指定フォルダA名]フォルダだけ(同階層のファイル・サブフォルダを含まない)を作成・追加。※メディアに同名フォルダがあるとNG
    A同名フォルダがあるとtry catchに引っ掛かるが無視。
    Bこの時点でどちらにしても[指定フォルダ]が存在することになる。
    C[指定フォルダ]のファイル・サブフォルダをチェック
    string[] files = Directory.GetFiles(指定フォルダパス);
    string[] dirs = Directory.GetDirectories(指定フォルダパス);
    D同階層のファイルを[指定フォルダ]に追加
     rootItem.AddFile(*****) 
    E同階層のフォルダを1フォルダずつ順に指定して@〜Eの再帰処理
    という感じです。


    多くのアイディアをいただき、大変助かりました。
    ありがとうございました
記事No.92232 のレス / END /過去ログ159より / 関連記事表示
削除チェック/

■99598  Re[3]: 乗数  繰り返し処理
□投稿者/ 魔界の仮面弁士 -(2022/05/01(Sun) 14:07:16)
    No99581 (たか さん) に返信
    > 三つ目の【】以外は【】は整数3桁(マイナスあり)まで
    > 三つ目の【】は少数3桁まで 四捨五入

    何故、たかさんがそれを答えるのですか?
    ここは yama さんが質問されている場ですよ!?

    元質問が書き換えられてしまっていますし、同一人物あるいは関係者なのでしょうけれども。

    http://bbs.wankuma.com/index.cgi?mode=man
    >>>
    >>> □ 利用方法/規約
    >>> ・一貫して同じハンドルを使用し、場を混乱させないようにしましょう。同じハンドルの方が質問の背景がわかりやすいです
    >>>


    少数というのが小数の書き間違いだったとします。また、最初の質問の
    【5】の【3】乗は【125】という投稿は、話を簡単にするために
    【5】の【3】乗は【125】の間違いだったとします。
    (全角入力も許容したいのであれば、数値化の前に半角変換処理を追加してください)


    今回、1つ目、2 つ目に小数が無かったことは僥倖ですね。
    【-2】の【2.5】乗ともなければ、結果は複素数(約 5.65685425 i) になってしまいますから…。


    まず初めに。

    そもそも計算できないケース…たとえば【0】の【0】乗と入力された場合や、
    「整数3桁(マイナスあり)」以外の入力時(たとえば "XYZ" や "" だった場合)に対しては
    計算結果を出すことができないので、計算前に事前判断して、結果を空欄にするなり
    エラーメッセージを出すといった判断処理が必須です。ここまでは良いでしょうか?
    https://ja.wikipedia.org/wiki/0%E3%81%AE0%E4%B9%97


    数値を取り出せたら、次に計算の手順。

    累乗(るいじょう)計算の場合、二つ目の【】は自然数でなければならないため、今回は
    冪乗(べきじょう)計算が求められていることになります。

    通常は、「^ 演算子」を使って算出するのが手っ取り早いです。あるいは Math クラスでも良いですが。
    ここの掲示板の左上にあるリンク(「C# と VB.NET 入門」または「C# と VB.NET のサンプル」)でも紹介されていますね。
    http://jeanne.wankuma.com/tips/vb.net/math/pow.html



    しかし、あえて繰り返し処理で実装してみるとするとどうなるか。
    そもそも【x】の【n】乗は、基本的には「x を n 回掛ける処理」に当たります。
    nが小数の場合は自然対数での変換も必要ですが、今回は整数なので、比較的簡単。


    【n】が自然数な場合(いわゆる累乗)については、For ループなどで算出できます。先ほどの
    >> (1) 累乗演算部を、繰り返しの掛け算処理として実装する。
    がこれに当たります。

    【n】が 0 の場合は、答えが 1 固定です。(x が 0 の場合は除きます)
    これは If 文で答えられますね。

    問題は【n】が 0 未満だった場合ですが、これは逆数にすれば計算できます。

    【n】の【-x】乗

    1÷(【n】の【x】乗)
    に等しいというルールです。


    【5】の【3】乗は【125】
    これは 5 × 5 × 5 = 125 だからですよね。

    【5】の【-3】乗は【0.008】
    これは 125 の逆数すなわち 1 ÷ 125 = 0.008 として求められます。


    それ以外に気にするのはデータの桁数。

    【999】の 【999】乗は【3.680634882592232678947…×(10の2996乗)】
    【999】の【-999】乗は【2.716922574226407515032…×(10の-2997乗)】
    ※この 2 つも逆数になっていますね。

    この場合、絶対値の桁数が大きすぎて VB で扱うのは厳しいです。
    有効桁数が圧倒的に不足します。

    Double.Epsilon(ゼロより大きい最小の Double 値)は、
     4.94065645841247×(10の-324乗)
    の精度しかないため、【10の-2997乗】のような微細な小数は扱えません。

    マイナス乗のケースについては、今回は小数点以下 3 桁まで求めれば十分とのことなので、
    結果の絶対値が 0.001 を下回る場合は 0.000 と表記すればよいことになります。
    0.001 の逆数は 1000 なので、最後の逆数に変換する前に、ループを打ち切ってしまえば良いでしょうね。


    また、Double 型で扱える範囲は
    Double.MinValue (最低値)が -1.7976931348623157×(10の308乗)
    Double.MaxValue (最大値)が +1.7976931348623157×(10の308乗)
    なので、【10の2996乗】のような巨大数も到底扱えません。
    No99580 のコードだと、無限大「∞」として出力されてしまいます。
    ちなみに Long 型だと 10 の18乗相当、Decimal 型だと 10 の 28乗が最大の桁数です。

    そのためループで処理する場合は、桁あふれする前に処理を中断してエラー出力するか、
    あるいは桁あふれのエラーを例外処理して捕まえるか、それとも
    Double 型で無限大値として保持させてしまうか…といった対処も必要ですね。

    誤差なく高精度で計算させることも不可能でもないですが、色々面倒なのでここでは割愛。


    あとは四捨五入。
    Double は二進小数を扱う型なので、四捨五入のような十進小数ベースの処理ですと誤差を含んでしまい、あまり相性が良くありません。
    Decimal 型なら十進小数なので、誤差の影響を受けにくいですが…今回は桁数的にも Double で済ませてしまいましょう。

    四捨五入の方法については、左上のリンクから辿れるリンクで紹介されています。
    https://dobon.net/vb/dotnet/beginner/floatingpointerror.html

    あるいは下記でも良いでしょう。
    https://dobon.net/vb/dotnet/programing/round.html


    最後に、そうして求めた数値を文字列として書式化して表示すれば完成ですね。

    文字列化する際の書式化指定の方法もいろいろありますが、
    まずは String.Format メソッドを使う方法を調べてみてください。
記事No.99571 のレス /過去ログ173より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -