调用外部程序时候的一个超级简单的问题 急急急!!(送分!!)(20分)

  • 主题发起人 主题发起人 suyude
  • 开始时间 开始时间
S

suyude

Unregistered / Unconfirmed
GUEST, unregistred user!
我调用一个外部程序的时候,如:
WinExec('c:/my.txt', SW_SHOWNORMAL);
要是当c盘里面没有my.txt的文件时候,如何让程序有一个"文件不存在"提示?
代码应该怎样写啊~~
我是超级菜鸟~~请大虾帮忙!!!
谢谢!!
 
我觉得最好是用CreateFile或者OpenFile先判断文件是否存在,然后再
调用WinExec('c:/my.txt',SW_SHOWNORMAL);
如果文件不存在,那么就show一个提示
 
用FindFirstFile吧

function IsFileExist : boolean;
var
; hFindFile:THANDLE;
; findStruct:TWIN32FindData;
begin
; hFindFile := FindFirstFile('c:/my.txt',findStruct);
; if hFindFile == INVALID_HANDLE_VALUE then
; ; Result := false;
; else Result := true;
; FindClose(hFindFile);
end;

应该可以吧,好多年没用delphi了
 
还有更好的方法吗?
 
if fileexists('c:/my.txt') then
ShellExecute(0,'open','notepad.exe','c:/my.txt',nil,SW_SHOW)
else
showmessage('a');
 
TO zhaohai9

那我运行 my.exe 怎么办,用什么来打开?
 
先看看帮助,然后你就会知道。
以下是Winexec的返回值,你可以用Case做判断。
Value Meaning
0 The system is out of memory or resources.
ERROR_BAD_FORMAT The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
 
你的到底是my.txt,还是my.exe?
若是my.txt则ShellExecute(0,'open','notepad.exe','c:/my.txt',nil,SW_SHOW)
若是my.exe 则WinExec('c:/my.exe',SW_SHOWNORMAL);
注意,uses shellapi,
 
WinExec在WIN32里最好不要用,可以用
ShellExecute(0, nil, filename, nil, nil, SW_SHOWNORMAL);
filename可以是exe文件,也可以是普通文件(如txt),只要系统里有文件关联就可以
直接打开(如pdf,bmp等等)。
代码参见zhaohai9的,不过不需要把'c:/my.txt'作为参数传递。
 
To libin06
请问如果当C:/my.exe 不存在的时候,如何实现程序提示"文件不存在"的提示呢?

zhaohai9兄弟的这代码要是my.txt改成了my.exe就不能用了!
if fileexists('c:/my.txt') then
ShellExecute(0,'open','notepad.exe','c:/my.txt',nil,SW_SHOW)
else
showmessage('a');

祝大家新年快乐!
 
var
; filename: string;
begin
; if FileExists(filename) then
; ; ShellExecute(0, nil, PChar(filename), nil, nil, SW_SHOWNORMAL)
; else
; ; ShowMessage(filename + ' not found');
end;
filename是*.exe或*.txt都可以。
 
uses shellapi;

if ShellExecute(0,NIL,'c:/my.txt',nil,nil,SW_NORMAL)<=32 then
; RaiseLastWin32Error;

c:/my.txt 可以改成任意的系统已经设置了关联的文档闻见(比如doc、txt、ini等)或者
可执行文件文件(exe文件)
如果你不想抛出异常,只想显示一个对话框,那么
RaiseLastWin32Error 改成 ShowMessage(SysErrorMessage(GetLastError()))
 
if fileExists(aFileName) then
; if CreateProcess(..........)<>0 then
; ; ;Writeln('success')
; else
; ; ;writeln('failed');
 
王寒松兄的不如Pipi.兄的
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部