显然这应该是可能的。例如,使用 NOTEPAD 或 HxD 打开和操作文件。但是它们不都是文本文件吗...如何指定使用哪个文本编辑器打开文件并使用 WINDOWS API 对文件进行操作。它肯定不在“CreateFile”中。
问问题
1100 次
3 回答
0
希望我理解你的问题......最简单的方法是启动所需的编辑器并将文件名作为参数传递,而不是“调用”文件(这将启动与文件类型关联的默认程序) .
例如,notepad.exe mytextfile.txt
或gvim.exe mytextfile.txt
。
如果编辑器不在您的. 上,则%PATH%
需要使用完整路径文件名。
于 2011-04-14T05:03:45.570 回答
0
你到底想做什么?你可以:
- 维护您希望安装的编辑器列表,并在系统的 PATH 中有条目(坏主意)
- 有一个您想要使用的编辑器,查询 Windows 注册表以找到编辑器的安装路径(使用
RegGetValue
),然后使用 ) 启动编辑器CreateProcess
(更好的主意) - 查询注册表以获取给定文件类型的默认编辑器,然后使用
CreateProcess
. (最好的主意)
但这一切都取决于你的真正目标是什么。
根据需求编辑
所以,就这样我们在同一个页面上,从 C++ 开始,你想要:
- 将命令行参数带到您的 C++ 应用程序(文件名)
- 在任意编辑器中打开该文件
- 检测用户何时对该文件进行了更改
- 对文件内容进行操作
那是对的吗?
如果是这样,您可以:
- 利用Boost 库计算文件中当前数据的 CRC
- 使用我最初描述的方法之一启动编辑器
- 坚持一个紧密的循环,
sleep
因此当最初计算的 CRC 与循环的每次迭代计算的 CRC 匹配时,您不会占用资源
当然,您必须处理各种问题(这只是描述我可能使用的算法的一种超级简单的方式),例如:
- 如果用户不更改文件会发生什么?
- 如果找不到文件会怎样?
我确信有许多不同的方法可以做到这一点,但这是我目前能想到的最简单的方法(同时仍然能够相当确定这些变化)。
免责声明:我还没有实现这样的东西,所以我可能完全不在基地;)
于 2011-04-14T05:03:48.693 回答
0
您是否正在寻找Windows 上的ShellExecute()
或API?ShellExecuteEx()
他们将启动为文件注册的任何程序(通常基于文件名扩展名)。
于 2011-04-14T05:44:52.870 回答