【问题标题】:How to create a folder on desktop?如何在桌面上创建文件夹?
【发布时间】:2021-03-08 04:16:43
【问题描述】:

我目前正在对我的泥土椭圆赛车记分应用程序进行一些大修,我决定从我的应用程序的文件夹保存方面开始。

我想将文件路径从 C:\ 更改为直接保存到用户桌面的路径,以便更轻松地从我的应用程序中保存和查找已保存的文件夹(然后用户将选定的 CSV 文件写入该文件夹)。

我正在使用的当前代码:

procedure TfrmExDialog.FormShow(Sender: TObject);
var
  sInput:string;
begin
  sInput:=InputBox('Folder creation','Please enter the name of event without spaces (instead of spaces you can use _ )','C:\');
  folderForToday:=sInput;
  createdir(folderForToday);
end;

提前感谢您的帮助!

亲切的问候
PrimeBeat

【问题讨论】:

    标签: delphi export filepath desktop


    【解决方案1】:

    桌面只是一个文件夹,就像其他任何文件夹一样。你可以这样找到他的路径:

    var
        Path   : array [0..MAX_PATH] of Char;
        sInput : String;
    begin
        sInput := InputBox('Folder creation','Please enter the name of event without spaces (instead of spaces you can use _ )','C:\');
        sInput := sInput.Replace(' ', '_'); // Prevent spaces
        SHGetFolderPath(0, CSIDL_DESKTOP, 0, SHGFP_TYPE_CURRENT, @Path[0]);
        folderForToday := IncludeTrailingPathDelimiter(Path) + sInput;
        CreateDir(folderForToday);
    end;
    

    您也可以使用CSIDL_COMMON_DESKTOPDIRECTORY 获取所有用户的桌面目录。查看Microsoft Documentation 了解所有可能的值。

    在uses子句中添加WinApi.ShlObj。

    一旦你有了桌面文件夹,你可以在那里创建你的文件,或者使用标准的 Delphi 函数为你的文件创建一个子文件夹。

    【讨论】:

    • 我可以这样实现那个功能吗? sInput:=InputBox('Folder creation','Please enter the name of event without spaces (instead of spaces you can use _ )',''); folderForToday:=SHGetFolderPath(0, CSIDL_DESKTOP, 0, SHGFP_TYPE_CURRENT, @Path[0])+sInput;
    • 你需要使用这个来代替:SHGetFolderPath(..., Path); folderForToday := IncludeTrailingPathDelimiter(Path) + sInput; 或者:folderForToday := TPath.Combine(Path, sInput); 无论哪种方式,你都需要使用CSIDL_DESKTOPDIRECTORY而不是CSIDL_DESKTOP。另外,考虑不阻止用户输入空格,您可以简单地使用StringReplace()自己替换它们,例如:sInput := StringReplace(sInput, ' ', '_', [rfReplaceAll]);
    • 更好:sInput := sInput.Replace(' ', '_');
    【解决方案2】:

    我建议不要将您的数据保存在用户桌面上。为什么?这有多种原因:

    1. 虽然从技术角度来看,桌面只是另一个文件夹,但用户对桌面的看法要复杂得多。
      您会看到大多数人的桌面都充满了最常用程序的快捷方式。而且大多数人还倾向于通过将相似或相关的程序保留在同一个集群中来将这些快捷方式安排在多个集群中。这意味着这些快捷方式之间有空格。因此,当您的程序将在桌面上创建一个新文件夹时,其图标将放置在计算机可以找到的第一个空白空间中。对于桌面上有很多图标的用户来说,这可能会让您很难找到新创建的文件夹。
    2. 如果您的最终用户的桌面已经归档了各种项目,则新创建的文件夹将放置在用户桌面的查看区域之外。用户访问该文件夹的唯一方法是插入更大的显示器或使用文件资源管理器打开桌面文件夹,以便能够在所有桌面项目之间滚动。
    3. 您可能还记得最初推出 Windows 8 时根本没有桌面文件夹。是的,Microsoft 曾尝试完全删除桌面文件夹,但应许多早期的 Windows 8 Beta 测试人员的要求将其放回原处。因此无法保证桌面文件夹在未来的 Windows 版本中不会被删除。
    4. 由于 Desktop 文件夹默认位置始终位于系统驱动器上,因此将大量信息保存到此类文件夹可能会导致稳定性问题,尤其是在可能使用较小 SSD 作为系统驱动器和机械驱动器用于存储其他数据的计算机上。

    因此,我建议您将数据存储在 MyDocuments 或 AppData 等其他文件夹中。

    您始终可以通过调用ShellExecute(Handle, 'open', MyFolder, '', '', SW_SHOWNORMAL); 来添加从应用程序在文件资源管理器中打开此类文件夹的功能,其中MyFolder 只是您要打开的文件夹的路径位置。

    但您最好让最终用户自行选择他们希望保存这些数据的位置。

    如果您真的担心您的最终用户可能会忘记他们为保存数据选择的位置,您还可以使用How to Read/Write Windows 7 Library Locations? 中提到的方法注册指向此类文件夹的新 Windows 库

    【讨论】:

    • @SilverWarrior 我将文件夹保存到桌面的原因是,当必须将其导入 Excel 文件时,可以轻松再次找到充满不同赛车类 CSV 文件的文件夹(是的,发生这种情况是因为当天的比赛结果必须交给管理机构进行管理等)。所以我决定将它保存到桌面以使导入过程更容易。但是 thx 将来会记住这一点。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多