• ベストアンサー

VB2008でテキスト以外のファイルの開き方について

現在VB2008環境でファイル操作ができるソフトを開発中です。 openfiledialogでファイルを選択して開く、といったことがしたいと思い、以下のようにやってみました。 Dim ofd As New OpenFileDialog() ofd.FileName = FN ofd.InitialDirectory = DN ofd.FilterIndex = 2 ofd.Title = "" ofd.RestoreDirectory = True ofd.CheckFileExists = True ofd.CheckPathExists = True If ofd.ShowDialog() = DialogResult.OK Then Dim FO As Object FO = Shell(ofd.InitialDirectory + ofd.FileName, vbNormalFocus) End If FN,DNは他で指定したファイル、ディレクトリの名前です。 これでデバック実行すると「FileNotFoundExceptionはハンドルされませんでした」というエラーが出て開けませんでした。 VBでのソフト開発自体はじめて間もない為理解していない部分も多く説明も至ってはいないと思いますが、どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

バイナリーファイルとして読み込めばよいわけですよね? Dim fileContents As Byte() fileContents = My.Computer.FileSystem.ReadAllBytes(ofd.FileName) 文字列に変換したい場合 dim str as string 'Shift JISとして文字列に変換 str = System.Text.Encoding.GetEncoding(932).GetString(fileContents) 'JISとして変換 str = System.Text.Encoding.GetEncoding(50220).GetString(fileContents) 'EUCとして変換 str = System.Text.Encoding.GetEncoding(51932).GetString(fileContents) 'UTF-8として変換 str = System.Text.Encoding.UTF8.GetString(fileContents) または最初から文字列として読み込む場合 Using sr As New StreamReader(ofd.FileName, System.Text.Encoding.Default) Dim str As String Do '1行づつ読み込む str = sr.ReadLine Loop Until sr.Peek = -1 End Using

negi0810
質問者

お礼

ありがとうございます。 非常に参考になりました。

その他の回答 (1)

回答No.1

FileNotFoundExceptionを調べていただければわかると思いますが、存在しないファイルを開こうとしてExceptionが発生しています。 ちなみにShellでは終了コードが取得できません。 終了コードが取得したい場合はprocessを利用してください。 http://jeanne.wankuma.com/tips/vb.net/file/

関連するQ&A

  • Visual Basic 2005で困ってます

    「ファイルを開く」ダイアログを表示して 画像ファイルを選択し、そのファイルをPictureboxに表示させたいのですが 画像が表示されずエラーが出てしまいます。 Private Sub 開くOToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くOToolStripMenuItem.Click Dim ofd As New OpenFileDialog() ofd.FileName = ""   ofd.InitialDirectory = "デスクトップ"       ofd.Filter = _ "すべてのピクチャーファイル(*.jpg;*.jpeg)|*.jpg;*.jpeg|すべてのファイル(*.*)|*.*"   ofd.FilterIndex = 2 ofd.Title = "開くファイルを選択してください" ofd.RestoreDirectory = True ofd.CheckFileExists = True ofd.CheckPathExists = True If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then Console.WriteLine(ofd.FileName) lstFileName.Items.Add(ofd.FileName) End If このようなプログラムなのですが どのように変えたらよろしいでしょうか? 教えてください、よろしくお願いします。

  • VB2010でCSV取込

    VB2010とAccessを使用しています。 あるCSVファイルからACCESSへデータ取り込みをしようとして CSVをデータテーブルに代入するコードを考えているのですが 下記のコードでは『FROM句』のエラーのようでうまく作動しません? ご教授お願いします。 Private Sub ToolMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolMenu.Click Dim OFD As New OpenFileDialog OFD.FileName = "" OFD.InitialDirectory = "\\10.20.100.35\data\LOG\" OFD.Filter = "CSVファイル(*.csv)|*.csv|すべてファイル(*.*)|*.*" OFD.FilterIndex = 1 OFD.Title = "取り込むCSVファイルを選択してください" OFD.RestoreDirectory = True OFD.CheckFileExists = True OFD.CheckPathExists = True If OFD.ShowDialog() = DialogResult.OK Then Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection Dim CSVFileName As String = System.IO.Path.Combine(OFD.InitialDirectory, "aaa.csv") OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & OFD.InitialDirectory & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try End If End Sub

  • [C#] OpenFileDialogによって得られた'Filenam

    [C#] OpenFileDialogによって得られた'Filename'を、Sting型にするには? OpenFileDialogの処理をクラスにまとめて、そこから得られた文字列を返したいと思います。 --------------------------------------------------- class GetFileName { public void OpenFileDialog(StringBuilder name) { //OpenFileDialogクラスのインスタンスを作成 OpenFileDialog ofd = new OpenFileDialog(); ofd.FileName = "sd.zip"; ofd.InitialDirectory = @"C:\"; ofd.Filter = "ZIP Failes(*.zip;*.zi_)|*.zip;*.zi_|All Files(*.*)|*.*"; ofd.FilterIndex = 1; //タイトルを設定する ofd.Title = "Please select the opening file."; ofd.RestoreDirectory = true; ofd.CheckFileExists = true; ofd.CheckPathExists = true; //ダイアログを表示する if (ofd.ShowDialog() == DialogResult.OK) { //OKボタンがクリックされたとき //選択されたファイル名を表示する Console.WriteLine(ofd.FileName); name = ofd.FileName;         <<<--- ここでエラーになる } } } //呼び出し元 public partial class Form1 : Form { public Form1() { InitializeComponent(); } // //  ボタン // private void buttonDec_Click(object sender, EventArgs e) { StringBuilder fname = new StringBuilder(256); GetFileName gf; gf = new GetFileName(); //インスタンス化 gf.OpenFileDialog(fname); Console.WriteLine(fname); // } } どのようにすれば、得られた文字列を戻すことが出来ますか。 以上、よろしくお願いします。

  • ファイルダイアログのカレントフォルダ

    vb.netのOpenFileDialogでダイアログを開いたとき、最初はマイドキュメントが表示されますが 違うフォルダからファイルを選ぶと、次にダイアログを開いたときはそのフォルダ(カレントフォルダ?)がまず表示されます。 その情報はどこに保存されてるのですか? 同じパソコンでプログラムをコピーして交互に動かしてもカレントフォルダはその度に変わってるようです。 別のパソコンにプログラムをコピーしたら(最初だけは)マイドキュメントからになるんですか? もう1つ質問で RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですが なぜでしょう? 試しに作ったコードは↓です。 環境はvb2005、XP-sp3です。 -------------------- Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない) Dim OpenFileDialog1 As New OpenFileDialog() ' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False) OpenFileDialog1.RestoreDirectory = False ' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If OpenFileDialog1.ShowDialog() = DialogResult.OK Then MessageBox.Show(OpenFileDialog1.FileName) End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない) Dim OpenFileDialog2 As New OpenFileDialog() ' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False) OpenFileDialog2.RestoreDirectory = True ' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If OpenFileDialog2.ShowDialog() = DialogResult.OK Then MessageBox.Show(OpenFileDialog2.FileName) End If End Sub End Class --------------------

  • VB2008によるOCX作成、またはHTMLからのDLL呼び出しは可能でしょうか?

    こんにちは。 はじめての投稿になります。 私は現在、「ファイルを開く」のコモンダイアログボックスを起動できるHTML画面を作りたいと思っております。 その画面ではサーバ側のファイルを閲覧させたいのですが、認証やセキュリティなどの観点から、 ダイアログボックスの起動はクライアント側で動作するようにしたいです。 それにあたって、ダイアログボックスを呼び出すオブジェクトをAxtiveXコントロール(OCX)で作成し、 そのOCXをHTMLから呼び出すことで実現できないかと考えました。 そこで、以下のことを調べております。 (1)無償のVB開発環境を使ってAxtiveXコントロールを作成することができるか? (2)AxtiveXコントロールを作成できないなら、AxtiveX DLLをHTMLから呼び出せるか? ちなみに現在使用している「無償のVB開発環境」は、Visual Studioの Visual Basic 2008 Express Edition です。 (1)に関しては、VB6ではAxtiveXコントロールを作成できたと聞きますが、どうもVB2008では(.Netでは)作成できないようです。(現在までに見つけた情報に、「.Netで作成できる」というものがないため) (2)に関しては、VB2008 Express Edition を使って、ダイアログボックスを呼び出す AxtiveX DLL を作成することには成功しています。 VBのCOMクラスのテンプレートにダイアログボックス起動の関数を記述し、ビルドしてdllを作成。 ↓ 別途VBによるWindowsフォームアプリケーションを作成し、「参照の追加」で上記dllを登録してダイアログボックス起動の関数を呼び出す。 という方法で、ダイアログボックスを呼び出せました。 ですので、HTMLの画面からも同じようにdll呼び出しができないかと思ったのですが、現在のところ方法が見つかりません。 ダイアログボックスを開く機能さえあればよく、ユーザーインターフェースは不要なので AxtiveX DLL でもよいと思ったのですが、HTMLからの呼び出しにはDLLではなくOCXを用いるという情報しか見つけられませんでした。 以上のことから、VB2008ではHTMLからダイアログボックスを呼び出すActiveXを作れないのではないか?と思える状態なのですが、それが可能であるという話がもしありましたら、お教えいただきたく思います。 最低限「クライアント側からのダイアログボックス起動ができるHTML」「ダイアログボックス起動はVBで作成」という条件を満たせればよいので、(1)(2)で実現できなければ別の方法を探すことにします。 最後に 必要かどうかわかりませんが、(2)で試しに作ったダイアログボックス呼び出しのCOMクラスのソースを載せておきます。 ご回答の参考になりますでしょうか。 Imports System.Windows.Forms <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _ Public Class ComClass1 Public Const ClassId As String = "2bdd38a4-f946-44e2-af47-5b9cbd2c24d5" Public Const InterfaceId As String = "fcd22890-f4cd-4e2a-b8c0-ae83f290c250" Public Const EventsId As String = "86c74809-966a-47cf-9324-adce776030eb" Public Sub New() MyBase.New() End Sub Public Function subOpenFile(ByVal inFilePass As String) As Boolean subOpenFile = False 'OpenFileDialogクラスのインスタンスを作成 Dim ofd As New OpenFileDialog() If inFilePass = "" Then ofd.InitialDirectory = "C:\" Else ofd.InitialDirectory = inFilePass End If ofd.Filter = "HTMLファイル(*.html;*.htm)|*.html;*.htm|すべてのファイル(*.*)|*.*" ofd.FilterIndex = 2 ofd.Title = "開くファイルを選択してください" ofd.RestoreDirectory = True ofd.CheckFileExists = True ofd.CheckPathExists = True 'ダイアログを表示 If ofd.ShowDialog() = DialogResult.OK Then Console.WriteLine(ofd.FileName) End If subOpenFile = True End Function End Class (呼び出し側では以下の記述で呼び出しに成功しました) Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Test As New COMTest1.ComClass1 Call Test.subOpenFile("C:\WINDOWS") End Sub 以上、よろしくお願いいたします。

  • VB2005でExcelファイルを開く

    こんにちは。 VB2005の勉強をさせて頂いています。 ボタンを押すとコモンダイヤログを表示し、 ダイヤログ内で選択したExcelファイルの内容をフォームのDataGridViewにもって行きたいと思っていますが 上手くできません。一応現在のソースを下記に置いておきます。 特に、下記のソースの 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next のループ条件xlSheet.Rows.Count - 1がどうも6万くらいになっているようなのですが、 実際セルに入力したデータは5行程度のものです。 1セル1セル文字が入っているかどうかを調べていかないといけないのでしょうか? よろしければ、具体的なソースやアドバイスをお願いいたします。 -------------------------------------- Dim ofd As New OpenFileDialog() 'ofdの設定をする 'ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If ofd.ShowDialog() = DialogResult.OK Then '選択されたファイルを読み取り専用で開く Dim ReadFile As System.IO.Stream ReadFile = ofd.OpenFile() If Not (ReadFile Is Nothing) Then Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks '既存ファイルを開く場合 Dim xlFilePath As String = ofd.FileName Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next 'xlSheet の解放 'xlSheets の解放 'xlBook を閉じる 'xlBook の解放 'xlBooks の解放 'Excelを閉じる 'xlApp を解放 End If End If ofd.Dispose()

  • VBによるExcelファイルの開き方を教えて下さい。

    ※VBプログラムからエクセルを起動し技術資料を作成するものです [1]新規ファイルをオープンした場合は、書き込みは正常に作動します。 [2]既設のファイルは、Shell関数でエクセルファイルをオープンしています。 [3]データ書き込みで、下記のエラーが発生します。 「NullReferenceExceptionはハンドルされませんでした。」 (オブジェクト変数又はWithブロック変数が設定されていません) [4]ファイルのオープンコードは下記のとうりです。 Private Sub newF_Open() Me.Hide() xlApp = CreateObject("Excel.Application") xlBook = xlApp.workbooks.add xlSheet = xlBook.sheets("sheet1") xlBook.application.Visible = True Me.Show() MsgBox("Excelファイルは開きましたか", 0, "確認") End Sub 'rbtNEWボタンでの変更記述 Private Sub oldF_Open() Dim Ret As Object Dim Shell As Object With OpenFileDialog1 .Title = "ファイルの選択" .CheckFileExists = True .RestoreDirectory = True End With Me.Hide() Ret = OpenFileDialog1.ShowDialog() If Ret = Windows.Forms.DialogResult.OK Then End If Shell = CreateObject("Shell.Application") Shell.shellexecute(OpenFileDialog1.FileName, , Application.StartupPath, "open", 1) MsgBox("Excelファイルは開きましたか", 0, "確認") Me.Show() End Sub 'rbtOLDボタンでの変更記述 ※既設ファイルへの認識が、新規オープンファイルと異なる為だと思い ますが、 解決方法を、教えてください。

  • 音声アラームの追加について

    素人の質問が以下のとおりです。 音声付のアラームを作っています。 機能として、OpenFileDialogを利用して、選択されたWavもしくmp3ファイルを再生することです。 ソースコードは以下のとおりです。 Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged Call sudAlarm() End Sub Sub sudAlarm() Dim value As String Dim ofd As New OpenFileDialog() ofd.InitialDirectory = "C:\" ofd.Filter = "音声ファイル|*.wav|音声ファイル(*.mp3)|*.mp3" ofd.FilterIndex = 2 ofd.RestoreDirectory = True If ofd.ShowDialog() = DialogResult.OK Then value = ofd.RestoreDirectory My.Computer.Audio.Play(value) 'My.Computer.Audio.Play(value,AudioPlayMode.BackgroundLoop) 'My.Computer.Audio.Stop() End If End Sub 結果は My.Computer.Audio.Play(value)にエラーがあってうまくいけませんでした。 エラー内容は”指定されたファイルが存在していない”ような内容です。 もちろん、ファイルがちゃんとおきました。 以上、宜しくお願いします。

  • vb txtファイル名に年月日、日時を追加する方法

    こんにちは、現在visual studio 2013 で勉強をしている初心者です。現在CSVデータの取り込みの際、重複した値をtxtファイルに保存しているのですがそのファイル名に「年月日、日時」を追加したいのですがやり方がわかりません。教えていただきたいです。 重複リスト.txt 2019/7/26 10:00みたいなのをイメージしているのですが・・・ 以下にソースを貼っておきます。 Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button_torikomi.Click 'OpenFileDialogクラスのインスタンスを作成 Dim ofd As New OpenFileDialog() Dim strSQL As String = Nothing Dim DT As New DataTable Dim clsdb As CLS_db 'クラスの呼び出し SQL接続 clsdb = New CLS_db 'はじめに表示されるフォルダを指定する ofd.InitialDirectory = "C:\" '[ファイルの種類]に表示される選択肢を指定する ofd.Filter = "CSVファイル(*.csv;*.csv)|*.csv;*.csv|すべてのファイル(*.*)|*.*" '[ファイルの種類]ではじめに選択されるものを指定する '2番目の「すべてのファイル」が選択されているようにする ofd.FilterIndex = 0 'タイトルを設定する ofd.Title = "開くファイルを選択してください" 'ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする ofd.RestoreDirectory = True ofd.CheckFileExists = True ofd.CheckPathExists = True 'ダイアログを表示する If ofd.ShowDialog() = DialogResult.OK Then 'OKボタンがクリックされたとき、選択されたファイル名を表示する Console.WriteLine(ofd.FileName) Dim sr As New System.IO.StreamReader(ofd.FileName, _ System.Text.Encoding.GetEncoding("shift_jis")) '内容を一行ずつ読み込む Dim sw As String = sr.ReadLine() While sr.Peek() > -1 Dim s As String = sr.ReadLine() Dim parts As String() parts = Split(s, ",") strSQL = "SELECT カナ氏 FROM 従業員登録 WHERE 従業員コード = " & parts(0) & "" '重複処理 DT = clsdb.GetDataTable(strSQL) If DT.Rows.Count > 0 Then 'Shift JISで書き込む Dim swt As New System.IO.StreamWriter("C:\test\重複リスト.txt", _ True, _ System.Text.Encoding.GetEncoding("shift_jis")) '重複リスト.txtの内容を書き込む() swt.Write(parts(0)) swt.Write(","c) swt.Write(parts(1)) swt.Write(","c) swt.Write(parts(2)) swt.Write(","c) swt.Write(parts(3)) swt.Write(","c) swt.Write(parts(4)) swt.Write(","c) swt.Write(parts(5)) swt.Write(","c) swt.Write(parts(6)) swt.Write(","c) swt.Write(parts(7)) swt.Write(","c) swt.Write(parts(8)) swt.Write(","c) swt.WriteLine(parts(9)) '閉じる() swt.Close() Else strSQL = "INSERT INTO 従業員登録(従業員コード,カナ氏,カナ名,氏,名,性別,生年月日,入社日,部署,PASSWORD) VALUES ( '" & parts(0) & "','" & parts(1) & "','" & parts(2) & "','" & parts(3) & "','" & parts(4) & "','" & parts(5) & "','" & parts(6) & "','" & parts(7) & "', '" & parts(8) & "','" & parts(9) & "')" Try clsdb.Execute(strSQL) Catch ex As Exception MessageBox.Show(ex.Message) End Try End If MsgBox(strSQL) End While '閉じる sr.Close() If DT.Rows.Count > 0 Then MsgBox("従業員コードが同じです", MessageBoxIcon.Warning, "重複エラー") Else MsgBox("追加しました。", MessageBoxIcon.Asterisk, "追加") End If End If '更新テーブル再読み込み 'SQL構文を指定します。 strSQL = "select * from 従業員登録" '即反映 Try clsdb = New CLS_db DT = clsdb.GetDataTable(strSQL) 'データグリッドビューのデータソースを設定 Me.DataGridView1.DataSource = DT Catch ex As Exception MessageBox.Show(ex.Message) End Try DataGridView1.ReadOnly = True '元に戻す Me.Cursor = Cursors.Default End Sub End Class

  • デバッグエラー

    VBで、簡単なお絵かきツールを作りましたが、ボタン4(開くイベント)で、「開く」ではなく、キャンセルをクリックした際に、デバッグエラーが出ました。 プログラムを記載しておきますので、対処方法を教えていただけませんか。 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim filename As String OpenFileDialog1.AddExtension = True OpenFileDialog1.Filter = "すべてのファイル|*.*" OpenFileDialog1.ShowDialog() OpenFileDialog1.Title = "開くファイルを指定してください。" filename = OpenFileDialog1.FileName If filename <> "" Then b.Dispose() canvas.Dispose() canvas = Image.FromFile(filename) b = Graphics.FromImage(canvas) PictureBox1.Image = canvas End If End Sub です。 ちなみに、保存の際には出ません。

専門家に質問してみよう