• ベストアンサー

なんでGetOpenFileNameとGetSaveFileNameを1本の関数に統合しなかったの?

kotetsu2の回答

  • ベストアンサー
  • kotetsu2
  • ベストアンサー率20% (1/5)
回答No.4

明らかに用途も目的も違いますから (単にファイル制御の部分が共通するだけ) 仮に共通するルーチンが多くてもこれを一緒にする 方が間違いの元で無謀な気がします。 開発言語としては、多少手間でもエラーにならない 間違いの元を極力減らす方が優先でしょう (ファイルを開いた筈が空ファイルを上書きしちゃったなんてプログラムミスが増えたら悲惨です) ご質問に対しては、的外れかもしれませんが・・・

omanko_shitai
質問者

お礼

コメントありがとうございます。 APIを直接操作するのは危険なので、ラッパークラスを作ることにしました。

関連するQ&A

  • ディレクトリの選択方法

    ファイルを選択する場合は ☆OPENFILENAME構造体☆ を使いますが ディレクトリを選択する場合にはどんな構造体を使うのでしょうか?

  • OPENFILENAME構造体について

    保存ダイアログボックス関数のパラメータに渡す OPENFILENAME構造体の全メンバの意味が知りたいのですが、 情報を知っている人は教えてください。

  • テーブルの統合・日付別集計

    Accessを使ってあるデータの送信履歴を記録しており 日付別の統計を取りたいと考えています。 AテーブルとBテーブルは以下のような構造をしています。  [id]項目ID(数値型)  [senddate]日付を表すフィールド(日付/時刻型)  [endflg]終了フラグ(数値型) endflg=1を条件にして Aテーブル・Bテーブルを統合した日付別統計をとるには どのようなSQL文を書けばよいのでしょうか?

  • 私が統合失調症になったら...

    いつもお世話になっております。 統合失調症の症状として、被害妄想があると聞きます。 ハッキングされてる、盗聴されている、集団ストーカーされている、 などです。 実際は単なる一般人が、そうそうそんな事をされるはずがないと思っています。 そして私は自他ともに認めるモブ気質ですが、統合失調症になった時は 世間が私に執着して監視しているような気がしてくるのでしょうか? そもそも、私のような現実主義の人間は罹患しないのでしょうか? もしくは罹患してもその部分だけは出て来ないのでしょうか? 民さんはどう思われますか? ワタシ的には占いを重く見たり、夢は何かの暗示だと信じ込むピュアな タイプしか罹らないのじゃないかなと思ってます。 遺伝性も多少あるようだけど脳の構造が遺伝で似てれば 遺伝もするかなと。

  • GetOpenFileName関数でフォルダーを開くには、

    GetOpenFileName関数でフォルダーを開くには、 この関数はファイルを開く関数ですが、フォルダーを開くためのパラメータ等あるでしょうか? 又はフォルダーを開く関数があれば教えてください。

  • 構造体をファイルに出力できません

    はじめまして、お世話になります。 『ダイアログで取得したファイル名』を、含むData構造体をファイルとして書き込む場合に限り、ファイルが出力されません。 Data構造体の文字列file_nameが『ダイアログで取得したファイル名』でなければ正常に出力されます。また、関数の返値や書き込み後のFILE構造体の中身を読み込んで調べたりしましたが、見る限りエラーはありませんでした。 開発ツールはMicrosoft Visual Studio 2005を使用しています。 どうか皆さんの知恵を貸してください! お願いします! //ファイルとして出力する構造体 typedef struct { TCHAR file_name[256]; BYTE id; }Data; //ファイルを開くダイアログ void OpenFile(HWND hWnd, TCHAR file_name[]) { OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = TEXT("png files {*.bmp}\0*.bmp\0") TEXT("all files {*.*}\0*.*\0\0"); ofn.lpstrFileTitle = (LPWSTR)file_name; ofn.nMaxFileTitle = CHAR_SIZE; ofn.lpstrFile = NULL; ofn.Flags = OFN_FILEMUSTEXIST; GetOpenFileName(&ofn); } //ファイルを書き込む void SaveData(Data save_file[]) { FILE *file; errno_t err; size_t write_num; //書き込む err = _tfopen_s(&file, TEXT("hoge.map"), TEXT("w+b")); if(err != 0) return; write_num = fwrite(save_file, sizeof(Data), 6, file); //きちんと書き込めているか確かめる Data chek_data[6]; fseek(file, 0L, SEEK_SET); fread(chek_data, sizeof(Data), 6, file); fclose(file); }

  • GetOpenFileName 開かない

    win7 32bitで使用していたVBAが、win10 64bitで動作せず、困っております。 ダイアログが開かないまま先に進んでしまうのですが、どのように修正すれば良いでしょうか? #If Win64 Then Public Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" ( pOpenFileName As OPENFILENAME) As Long #Else Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" ( pOpenFileName As OPENFILENAME) As Long #End If Type OPENFILENAME lStructSize As Long hwndOwner As LongPtr hInstance As LongPtr lpstrFilter As String lpstrCustomFilter As Long nMaxCustrFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String Flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustrData As LongPtr lpfnHook As LongPtr lpTemplateName As Long End Type Public Const OFN_ALLOWMULTISELECT = &H200 Public Const OFN_CREATEPROMPT = &H2000 Public Const OFN_EXPLORER = &H80000 Public Const OFN_FILEMUSTEXIST = &H1000 Public Const OFN_HIDEREADONLY = &H4 Public Const OFN_NOCHANGEDIR = &H8 Public Const OFN_NODEREFERENCELINKS = &H100000 Public Const OFN_NONETWORKBUTTON = &H20000 Public Const OFN_NOREADONLYRETURN = &H8000 Public Const OFN_NOVALIDATE = &H100 Public Const OFN_OVERWRITEPROMPT = &H2 Public Const OFN_PATHMUSTEXIST = &H800 Public Const OFN_READONLY = &H1 Public Const OFN_SHOWHELP = &H10 Public Const OFN_EXTENSIONDIFFERENT = &H400 Public Function GetFileName(pstrDir As String, pstrFile) As String Dim pOpenFileName As OPENFILENAME Dim lngRet As Long pOpenFileName.hwndOwner = Application.hWndAccessApp pOpenFileName.hInstance = 0 ' pOpenFileName.lpstrFilter = "CSVファイル (*.xlsx)" & String(1, vbNullChar) & "*.xlsx" & String(2, vbNullChar) ' pOpenFileName.lpstrFilter = "全てのファイル (*.*)" & String( 1, vbNullChar) & "*.*" & String(2, vbNullChar) pOpenFileName.lpstrCustomFilter = 0 pOpenFileName.nMaxCustrFilter = 0 pOpenFileName.nFilterIndex = 1 pOpenFileName.lpstrFile = String(511, vbNullChar) pOpenFileName.nMaxFile = 511 pOpenFileName.lpstrFileTitle = String(512, vbNullChar) pOpenFileName.nMaxFileTitle = 511 pOpenFileName.lpstrInitialDir = pstrDir pOpenFileName.lpstrTitle = String(1, vbNullChar) pOpenFileName.nFileOffset = 0 pOpenFileName.nFileExtension = 0 pOpenFileName.lpstrDefExt = String(1, vbNullChar) pOpenFileName.lCustrData = 0 pOpenFileName.lpfnHook = 0 pOpenFileName.lpTemplateName = 0 pOpenFileName.lStructSize = Len(pOpenFileName) pOpenFileName.Flags = OFN_HIDEREADONLY _ Or OFN_EXPLORER lngRet = GetOpenFileName(pOpenFileName) GetFileName = Left(pOpenFileName.lpstrFile, _ InStr(pOpenFileName.lpstrFile, vbNullChar) - 1) If Len(GetFileName) Then pstrFile = Left(pOpenFileName.lpstrFileTitle, _ InStr(pOpenFileName.lpstrFileTitle, vbNullChar) - 1) pstrDir = Left(GetFileName, Len(GetFileName) - Len(pstrFile) - 1) End If End Function '実行プロシージャ Private Sub CmdlgTest() Dim strPath As String, strfile As String Debug.Print GetFileName(strPath, strfile) End Sub

  • getOpenFilenameの使い方

    VB2005において下記のようなサンプルプログラムを書いていますが、 'GetOpenFilename'は'System.Windows.Forms.Application'のメンバーではありません。 というエラーメッセージが出ます。 要はファイルを読み込む前にファイル選択用のウィンドウを開きたいのですが、 どのような書き方をしたらいいのでしょうか。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim filename As VariantType filename = Application.GetOpenFilename("Text Files (*.txt), *.txt") End Sub End Class

  • JavaのRandomAccessFileについて教えてください。

    お世話になります。  Java(アプレットとして使用しています。)を最近から勉強し 始めました。  現在、作成しようとしているプログラムは、C言語で言うところの 構造体の項目をバイナリファイル内の任意の位置に読み書きしたいと 思っております。  現在、Javaでは、構造体の概念が見当たらなかったので、 Classで各フィールドを定義して、各フィールドの値を ByteBufferでByte配列に配置して、RandomAccessFileでこの配列の内容を書き込んだり、この逆の方法で 読み出したりしています。  この方法だと、各フィールドをわざわざ一つ一つByte配列に 配置しなければならず、面倒です。  他の言語の構造体やレコードの概念の様にフィールドの塊を 一気にランダムファイルに簡単に読み書きする方法は有りませんでしょうか?  ご存知の方がいらっしゃいましたら、ご教示の程、是非よろしくお願いします。

    • ベストアンサー
    • Java
  • ExecuteExcel4Macroを使ったレコードの読み込み方法につ

    ExecuteExcel4Macroを使ったレコードの読み込み方法について 下記サンプルは、ファイルを指定して、指定したファイルの中にあるシートを選択し、その中にあるデータを読込むものになっています。 読込ませるファイルのsheet1には、『 ID,顧客番号,氏名,住所,電話番号 』 が入っています。 下記サンプルでは、顧客番号フィールドのデータは読込めるのですが、該当するレコード全体を読込むにはどう組み立てればいいかよくわかりません。 すみませんが、どなたかご教授いただけませんでしょうか。よろしくお願いいたします。 Public Sub testes() ' 変数の指定 Dim OpenFileName, SheetName, Target, buf As String Dim i, TargetCol As Long, GetNames() ' 対象ブックの選択 OpenFileName = Application.GetOpenFilename("Microsoft Excel ブック,*.xls") If OpenFileName = "False" Then Exit Sub ' ファイル名に[]を付ける OpenFileName = Replace(OpenFileName, Dir(OpenFileName), "[" & Dir(OpenFileName) & "]") ' 対象ワークシート名の指定と取得 SheetName = InputBox("対象ワークシート名を入力します") If SheetName = "" Then Exit Sub Target = "'" & OpenFileName & SheetName & "'!" ' ワークシートの正誤チェック On Error Resume Next buf = ExecuteExcel4Macro(Target & "R1C1") If Err <> 0 Then MsgBox "ワークシート [ " & SheetName & " ] を読めませんので終了します。", vbExclamation Exit Sub End If On Error GoTo 0 ' [顧客番号]フィールドを探す For i = 1 To 256 If ExecuteExcel4Macro(Target & "R1C" & i) = "顧客番号" Then TargetCol = i Exit For End If Next i If TargetCol = 0 Then MsgBox "[顧客番号]フィールドが確認できません。", vbExclamation Exit Sub End If ' データの読み込み For i = 1 To 10000 buf = ExecuteExcel4Macro(Target & "R" & i) If buf = "0" Then Exit For ' シートに出力する Worksheets("sheet3").Activate ActiveSheet.Cells(i, 1) = buf Next i End Sub