【问题标题】:Specify fllename without user interaction?在没有用户交互的情况下指定 fllename?
【发布时间】:2012-02-15 21:19:54
【问题描述】:

我有一段糟糕的代码,我只想自己指定输入文件,而不是向用户弹出任何类型的对话框。我知道这段代码很古老,但希望一些聪明人能快速回答这个问题,因为它很简单,我敢肯定,但我不是程序员。

BOOL Geeeez()
{
    BOOL ret=FALSE;
    NavDialogRef fileDialog;
    NavDialogCreationOptions fo;
    NavGetDefaultDialogCreationOptions(&fo);
    fo.optionFlags=0;
    fo.parentWindow=win;
    NavCreateChooseFileDialog(&fo,NULL,NULL,NULL,NULL,NULL,&fileDialog);
    if (!NavDialogRun(fileDialog)) {
        NavReplyRecord r;
        if (!NavDialogGetReply(fileDialog,&r)) {
            AEKeyword k;
            FSRef fr;
            if (!AEGetNthPtr(&r.selection,1,typeFSRef,&k,NULL,&fr,sizeof(fr),NULL)) {
                char file[256];
                FSRefMakePath(&fr,(BYTE*)file,sizeof(file));
                if (!(data=THIS_CodeReallySucks(FALSE,file,0,0,NULL))
                ......

【问题讨论】:

  • 它是什么,是碳……Noah 想要的是有人重写它以删除 NavDialogRef 的东西。 Noah 应该说的是:结果需要继续是 Carbon 还是应该是 Objective C,因为这就是你标记这个问题的原因?
  • @MichaelDautermann,是的。如果我知道该怎么做,我就不会问了。当然,将其更新为objective-c会很好,尽管只要它有效,我不介意它是否保持史前形式。

标签: objective-c macos cocoa macos-carbon


【解决方案1】:

所有代码所做的只是要求用户选择一个文件,然后最终将文件系统引用转换为包含路径的 C 字符串。如果知道路径,上面的代码可以简化为:

BOOL Geeeez()
{
    if (!(data = THIS_CodeReallySucks(FALSE, "path to file goes here", 0, 0, NULL))
    ...

【讨论】:

  • 是的...我也猜测在这种情况下路径需要是 POSIX (即用冒号划定...例如"Macintosh HD:Users:Noah:Desktop:somefile.txt")。
  • @user1118321,是的,这有点明显,我正在寻找更多关于它需要如何确切的细节。有些东西告诉我它并不像看起来那么简单。 --MichaelDautermann,感谢您的提示,但猜测对我没有多大帮助。 carbon 没有类似的代码,例如 NSBundle、NSHomeDirectory 等吗?该文件将在资源中,这就是我问的原因。
  • 是的,Carbon 有 CFBundle。你到底想做什么?您的问题是您想在不使用打开文件对话框的情况下获取文件,并且您已经知道它的路径。如果您知道它的路径,则可以跳过获取路径所涉及的所有内容。那么你真正想做的是什么?如果你想得到更好的答案,你需要写一个更清晰的问题。
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多