どうやらこれは可能なはずです。たとえば、NOTEPAD または HxD でファイルを開いて操作します。しかし、それらはすべてテキスト ファイルではありませんか...どのテキスト エディターでファイルを開き、WINDOWS API を使用してファイルを操作するかを指定するにはどうすればよいでしょうか。それは確かに「CreateFile」にはありません。
3 に答える
WindowsでShellExecute()
またはAPIをお探しですか?ShellExecuteEx()
ファイルに登録されているプログラムを起動します(通常、ファイル名の拡張子に基づきます)。
うまくいけば、私はあなたの質問を理解しています...これを行う最も簡単な方法は、ファイルを「呼び出す」のではなく、目的のエディターを起動してファイル名を引数として渡すことです(ファイルタイプに関連付けられたデフォルトプログラムを起動します) .
たとえば、notepad.exe mytextfile.txt
またはgvim.exe mytextfile.txt
.
エディターが にない場合は%PATH%
、フル パスのファイル名を使用する必要があります。
正確に何をしようとしているのですか?あなたは出来る:
- インストールされ、システムの PATH にエントリがあると予想されるエディタのリストを維持します (悪い考えです)。
- 使用したいエディターを用意し、Windows レジストリにクエリを実行してエディターのインストール パスを検索し ( を使用
RegGetValue
)、) でエディターを起動しCreateProcess
ます (もう少し良いアイデアです)。 - レジストリにクエリを実行して、特定のファイル タイプの既定のエディターを取得し、
CreateProcess
. (最高のアイデア)
しかし、それはすべて、あなたの目標が実際に何であるかによって異なります。
要件に基づいて編集
したがって、同じページにいるように、C++ から次のことを行います。
- コマンド ライン パラメーターを C++ アプリケーション (ファイル名) に渡す
- そのファイルを任意のエディターで開きます
- ユーザーがそのファイルに変更を加えたことを検出する
- ファイルの内容を操作する
あれは正しいですか?
その場合、次のことができます。
- Boost ライブラリを使用して、ファイル内の現在のデータの CRC を計算します
- 最初に説明した方法のいずれかを使用してエディターを起動します
- タイトなループに固執して
sleep
、最初に計算された CRC がループの反復ごとに計算された CRC と一致する間、リソースを消費しないようにします。
もちろん、対処しなければならないあらゆる種類の問題があります (これは、私が使用する可能性のあるアルゴリズムを説明するための非常に単純な方法です)。たとえば、次のとおりです。
- ユーザーがファイルを変更しないとどうなりますか?
- ファイルが見つからない場合はどうなりますか?
これを行うにはさまざまな方法があると確信していますが、これは現時点で私が考えることができる最も簡単な方法です (ただし、変更をかなり確実に行うことができます)。
免責事項:私はこのようなものを実装していないので、完全にベースから外れている可能性があります;)