我已经放弃了尝试找出这个问题的原因,但这是故事,希望你能给出一个小费......
当我开发独特的应用程序(http://code.google.com/p/sedev)时,我需要对其进行润色 我必须在应用程序的任何创建文件中添加文件摘要(我认为非常有用的信息),所以我决定采用NTFS兼容结构 修改:发生问题的代码段:
if (FileExists(BaseLocation + LeftStr(GetSSWData, Length(GetSSWData)
- 1) + '.vkp') = True) then // add NTFS descriptive information to output file
try
SetFileSummaryInfo
(PWideChar(BaseLocation + LeftStr(GetSSWData, Length
(GetSSWData) - 1) + '.vkp')); // in my testcase files full path is: C:\Documents and Settings\Kludge\Desktop\sedevrpg\SEDEV_RPG_O_710.vkp
ShowMessagePos('Patch Created successfuly!' + #13#13 +
'Please verify created data to www.se-developers.net.',
ParamStr2X, ParamStr3Y);
MessageBeep(0);
except // exception handler does not even fire on exception ...
on Exception do
begin
if (WarningChBx.Checked = True) then
ShowMessagePos
('Unable to add Description to Output file (' +
BaseLocation + LeftStr(GetSSWData, Length(GetSSWData)
- 1) + '.vkp )', ParamStr2X, ParamStr3Y);
MessageBeep(0);
end;
end
作者最终编辑:问题出现在SetFileSummaryInfo(PWideChar(''))中,因为在PWideChar转换后你得到了CHARACTER,而不是字符数组(又名字符串),因此它不再是有效的路径了!
以下是主要教程:http://www.delphipages.com/articles/setting_file_summary_information-9228.html
修改:更好的格式化教程是here。
但是,事实是我无法让那个该死的FileName参数接受任何字符串......我有EOleSysError异常:“无法找到”%1“。
错误操作数是:
OleCheck(StgOpenStorageEx(PWideChar(FileName),
STGM_SHARE_EXCLUSIVE or STGM_READWRITE,
STGFMT_ANY,
0, nil, nil, @IID_IPropertySetStorage, stg));
我不明白为什么它实际上想要%1 MSDOS文件名输入 我没有从CMD启动应用程序,因此我非常怀疑它需要文件路径的额外参数...
我已经尝试了所有可能的String和PString转换,也尝试了各种param传递方法......它只是不起作用...
任何帮助表示赞赏!
答案 0 :(得分:0)
我只能通过指定无效的文件名来重现您的情况。确保在文件名中包含完整路径。