如何在桌面创建文件夹?

How to create a folder on desktop?

我目前正在稍微改进我的椭圆形赛车守点应用程序,我决定从我的应用程序的文件夹保存方面开始。

我想将文件路径从 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

桌面和其他文件夹一样只是一个文件夹。你可以这样找到他的路径:

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 功能为文件创建子文件夹。

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

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

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

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

但您最好允许您的最终用户自行选择他们希望将这些数据保存在何处。

如果您真的担心您的最终用户可能会忘记他们选择的数据保存位置,您还可以注册新的 Windows 库,该库将使用 [=] 中提到的方法指向此类文件夹12=]