- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个小众问题,希望你能帮助我
我有一个非常古老的项目(2010 年左右 - 在 XCODE 3.2 上运行)
它是结合 C++ 编写的,还使用 JUCE 库进行音频插件开发的一些编程 - 它编译为音频单元和 VST
我遇到的问题是,自从 OS X Catalina 出现以来,OS X 中的目录查找已经损坏。
而不是它指向
/Volumes/Macintosh HD/Library/Application Support/Company Name/Product Name/Presets/
/Volumes/Macintosh HD///Macintosh HD/Library/Application Support/Company Name/Product Name/Presets/
#ifdef _Mac
tchar psz[1024]
IFile::GetSystemDirectory(IFile::SystemDirApplicationSupport, psz);
sPathName = std::string(psz);
sPathName += msCompanyName;
sPathName += ":";
sPathName += msProductName;
sPathName += ":Presets:";
#else
//windows stuff
#endif
return sPathName:
/*! \class IFile
* \brief Interface for accessing files
*
* Note that a file cannot be opened for simultaneous reading and writing
*/
class IFile : public virtual IDestructable
{
public:
//! Creates IFile
static IFile* Create();
//! Enum for defining file access (read / write / create)
enum EOpenFile {
//! Open file for reading only
FileRead = 0,
//! Open file for writing only. File must already exist.
FileWrite,
//! Open file for writing only. File may or may not already exist. If already existing it will be deleted.
FileCreate
};
//! Open file, given filename (full path)
/*!
\param pszPathName [in]: File to open (full path name).
\param OpenFile [in]: File access to open with
\return bool: true if success, false otherwise
*/
virtual tbool Open(const tchar* pszPathName, EOpenFile OpenFile) = 0;
//! Close is automatically called when opening a new file, or when destroying object. However you can call it manually if desired
virtual void Close() = 0;
//! Read from file
/*!
\param pch [out]: Buffer to be filled
\param iSize [in]: Number of bytes to read
\return tuint64: Number of bytes actually read
*/
virtual tuint64 Read(tchar* pch, tuint64 iSize) = 0;
//! Write to file
/*!
\param pch [in]: Buffer to write
\param iSize [in]: Number of bytes to write
\return tuint64: Number of bytes actually written
*/
virtual tuint64 Write(const tchar* pch, tuint64 iSize) = 0;
//! Seek to new position (from start of file). After opening file the position is always 0.
/*!
\param iPos [in]: Position to seek to (from start of file)
\return tuint64: New position
*/
virtual tuint64 Seek(tuint64 iPos) = 0;
//! Returns the size of file when it was initially opened
/*!
\return tuint64: Size of file when it was initially opened
*/
virtual tuint64 GetSizeWhenOpened() const = 0;
//! Returns current file position
/*!
\return tuint64: Current file position
*/
virtual tuint64 GetCurrentFilePosition() const = 0;
//! Gets (full) path name used when opening file
/*!
\param pszPathName [out]: Pointer to buffer of min. 513 characters to be filled with path name
*/
virtual void GetPathName(tchar* pszPathName) const = 0;
//! Reads tint32's with automatic crossplatform swapping
/*!
\param p [in]: Buffer to read into
\param iSize [in]: Number of tint32's to read
\return tuint64: Number of tint32's actually read
*/
virtual tuint64 ReadCP(tint32* p, tuint64 iSize) = 0;
//! Writes tint32's with automatic crossplatform swapping
/*!
\param p [in]: Buffer to write
\param iSize [in]: Number of tint32's to write
\return tuint64: Number of tint32's actually write
*/
virtual tuint64 WriteCP(tint32* p, tuint64 iSize) = 0;
//! Reads tfloat32's with automatic crossplatform swapping
/*!
\param p [in]: Buffer to read into
\param iSize [in]: Number of tfloat32's to read
\return tuint64: Number of tfloat32's actually read
*/
virtual tuint64 ReadCP(tfloat32* p, tuint64 iSize) = 0;
//! Writes tfloat32's with automatic crossplatform swapping
/*!
\param p [in]: Buffer to write
\param iSize [in]: Number of tfloat32's to write
\return tuint64: Number of tfloat32's actually write
*/
virtual tuint64 WriteCP(tfloat32* p, tuint64 iSize) = 0;
//! Static call to delete a file
/*!
\param pszPathName [in]: Full path name of file to delete
\return tbool: If success true, otherwise false
*/
static tbool DeleteFile(const tchar* pszPathName);
//! Static call to move a file
/*!
\param pszPathNameDest [in]: Path name of destination directory
\param pszPathNameSrc [in]: Path name of source directory
\param pszName [in]: Name of file
\return tbool: If success true, otherwise false
*/
static tbool MoveFile(const tchar* pszPathNameDest, const tchar* pszPathNameSrc, const tchar* pszName);
//! Static call to copy a file
/*!
\param pszPathNameDest [in]: Path name of destination directory
\param pszPathNameSrc [in]: Path name of source directory
\param pszName [in]: Name of file
\return tbool: If success true, otherwise false
*/
static tbool CopyFile(const tchar* pszPathNameDest, const tchar* pszPathNameSrc, const tchar* pszName);
static tbool CopyFile(const tchar* pszPathNameDest, const tchar* pszPathNameSrc);
//! Static call to create a directory
/*!
\param pszPathName [in]: Pathname of directory to create. May or may not have ending deliminator ('\' or ':')
\return tbool: If success true, otherwise false. Call may return false if the directory already exists.
*/
static tbool CreateDirectory(const tchar* pszPathName);
//! Enumeration of system directories
enum ESystemDir {
//! OSX: Users Preferences directory. Win32: Not valid
SystemDirPreferences = 0,
//! OSX: Users desktop. Win32: Users desktop.
SystemDirDesktop,
//! OSX: Application directory. Win32: "Program files" directory (use with caution, since application may be installed in custom location!)
SystemDirApplications,
//! OSX: Not implemented (should be users documents directory). Win32: Users documents directory.
SystemDirDocuments,
//! OSX: /Library/Application Support. Win32: "Program Files\Common" directory
SystemDirApplicationSupport,
//! OSX: The 'Music' folder inside the users private folder. Win32: The 'My Music' folder inside the users Documents folder
SystemDirMyMusic,
//! OSX: "Chewable" folder that gets cleaned upon boot. Win32: Temporary folder (same as TEMP env-variable).
SystemDirScratch,
//! OSX: Not implemented. Win32: Common application data folder
SystemDirAppData
};
//! Static call to get system directory
/*!
\param SystemDir [in]: Directory to get.
\param pszPathName [out]: Returned full path name. Must be preallocated with minimum 513 bytes.
*/
static void GetSystemDirectory(ESystemDir SystemDir, tchar* pszPathName);
//! Converts from OS specific path to internal path. Only works with full paths (not relative).
/*!
\param pszPathName [in/out]: Path to be converted. Returns converted path. Note that returned path may be 1 byte longer than the input path.
*/
static void PathFromOS(tchar* pszPathName);
//! Converts from internal path to OS specific path. Only works with full paths (not relative).
/*!
\param pszPathName [in/out]: Path to be converted. Returns converted path.
*/
static void PathToOS(tchar* pszPathName);
//! Converts an OS format path to internal format (':' separated)
/*!
\param pszPathNameIn [in]: The path to convert. It can be relative or absolute path, may include filename or not, and it may already be in internal format (won't fail).
\param pszPathNameOut [out]: The converted path (you can enter the same pointer for in and out to provide in-place convertion, it won't crash).
\param bMakeAbsPath [in]: True: the converted path will be prepended the current working directory (but only if it is not already an absolute path).
\param pbIsAbsPath [out]: True: the converted path is absolute, false: the converted path is relative (doesn't start with '/').
\return tbool: True upon convertion success, false upon internal error. Will almost always return true, since fail-tolerance is high.
*/
static tbool PathFromOS2(const tchar* pszPathNameIn, tchar* pszPathNameOut, tbool bMakeAbsPath = true, tbool* pbIsAbsPath = NULL);
//! Converts any internal format path to OS format (i.e. for Mac OS X => POSIX format, for Windows => DOS format)
/*!
\param pszPathNameIn [in]: The path to convert. It can be relative or absolute path, may include filename or not, and it may already be in OS format (won't fail).
\param pszPathNameOut [out]: The converted path (you can enter the same pointer for in and out to provide in-place convertion, it won't crash).
\param bMakeAbsPath [in]: True: the converted path will be prepended the current working directory (but only if it is not already an absolute path).
\param pbIsAbsPath [out]: True: the converted path is absolute, false: the converted path is relative (doesn't start with '/').
\return tbool: True upon convertion success, false upon internal error. Will almost always return true, since fail-tolerance is high.
*/
static tbool PathToOS2(const tchar* pszPathNameIn, tchar* pszPathNameOut, tbool bMakeAbsPath = true, tbool* pbIsAbsPath = NULL);
//! Checks if a string represents an absolute path
/*!
\param pszPathName [in]: The path to check. It may be in OS or internal format
\return tbool: True if path is absolute
*/
static tbool IsAbsPath2(const tchar* pszPathName);
//! Checks if a string points to an existing file or folder
/*!
\param pszItem [in]: The item to check the existance of
\param pbIsFolder [out]: True if existing item is a folder, False if not.<br>Omit parameter if you don't care
\return tbool: True if item is an existing file or folder
*/
static tbool Exists(const tchar* pszItem, tbool* pbIsFolder = NULL);
//! Split a full path into a path-only and a filename-only part
/*!
\param pszFullPath [in]: The full path to split
\param pszPathOnly [out]: The path-only part. Should be preallocated with 512 or more bytes.
\param pszNameOnly [out]: The name-only part. Should be preallocated with 512 or more bytes.
\param bAcceptEmptyPath [in]: True = won't fail even if the "full path" input consisted of only a name part
\param bAcceptEmptyName [in]: True = won't fail even if there was no filename in full path (it pointed to a path instead of a file)
\return tbool: True = Success, the two output strings were updated
*/
static tbool SplitPathToPathAndName(const tchar* pszFullPath, tchar* pszPathOnly, tchar* pszNameOnly, tbool bAcceptEmptyPath = true, tbool bAcceptEmptyName = true);
//! Creates an enum string with the names of all valid disk drives
/*
\param pszEnumNames [out]: Receives the drive letters (Windows) or names (OS X) as an enum string delimited by a char of your name
\param iBuffSize [in]: Max number of chars to place in the buffer (including trailing zero)
\param cDelimiter [in]: Character used for delimiting enum string
\param bAddExtraInfo [in]: For Windows: Returns not only the drive letter but also the volume name. For OS X: Ignored.
\return tbool: True upon success, False if insufficient buffer space (or other error)
*/
static tbool GetDriveNames(tchar* pszEnumNames, tint32 iBuffSize = -1, char cDelimiter = '@', tbool bAddExtraInfo = false);
virtual int GetLastError() = 0;
};
最佳答案
当前获取共享应用程序支持目录路径的正确方法需要使用Objective-C。您可以将单个 Objective-C 源文件添加到您的项目中并将其与其余部分链接。它与其余代码之间的接口(interface)可以是纯 C 语言。
例如:
void GetLocalApplicationSupportDirectory(char *out, size_t capacity)
{
if (!out || !capacity)
return;
NSArray<NSString*>* dirs = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSLocalDomainMask, YES);
if (dirs.count == 0)
{
out[0] = 0;
return;
}
const char *dir = dirs[0].fileSystemRepresentation;
if (strlen(dir) >= capacity)
{
out[0] = 0;
return;
}
strcpy(out, dir);
}
CFURLCreateWithFileSystemPath()
和
CFURLCopyFileSystemPath()
,均来自核心基金会。这些是纯 C。但是,您在 Catalina 上看到的错误可能是这些例程停止正常工作的结果。
关于c++ - 旧 C++ 代码中的目录查找导致 OS X Catalina 10.15 中的目录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61935702/
我尝试理解[c代码 -> 汇编]代码 void node::Check( data & _data1, vector& _data2) { -> push ebp -> mov ebp,esp ->
我需要在当前表单(代码)的上下文中运行文本文件中的代码。其中一项要求是让代码创建新控件并将其添加到当前窗体。 例如,在Form1.cs中: using System.Windows.Forms; ..
我有此 C++ 代码并将其转换为 C# (.net Framework 4) 代码。有没有人给我一些关于 malloc、free 和 sprintf 方法的提示? int monate = ee; d
我的网络服务器代码有问题 #include #include #include #include #include #include #include int
给定以下 html 代码,将列表中的第三个元素(即“美丽”一词)以斜体显示的 CSS 代码是什么?当然,我可以给这个元素一个 id 或一个 class,但 html 代码必须保持不变。谢谢
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我试图制作一个宏来避免重复代码和注释。 我试过这个: #define GrowOnPage(any Page, any Component) Component.Width := Page.Surfa
我正在尝试将我的旧 C++ 代码“翻译”成头条新闻所暗示的 C# 代码。问题是我是 C# 中的新手,并不是所有的东西都像 C++ 中那样。在 C++ 中这些解决方案运行良好,但在 C# 中只是不能。我
在 Windows 10 上工作,R 语言的格式化程序似乎没有在 Visual Studio Code 中完成它的工作。我试过R support for Visual Studio Code和 R-T
我正在处理一些报告(计数),我必须获取不同参数的计数。非常简单但乏味。 一个参数的示例查询: qCountsEmployee = ( "select count(*) from %s wher
最近几天我尝试从 d00m 调试网络错误。我开始用尽想法/线索,我希望其他 SO 用户拥有可能有用的宝贵经验。我希望能够提供所有相关信息,但我个人无法控制服务器环境。 整个事情始于用户注意到我们应用程
我有一个 app.js 文件,其中包含如下 dojo amd 模式代码: require(["dojo/dom", ..], function(dom){ dom.byId('someId').i
我对“-gencode”语句中的“code=sm_X”选项有点困惑。 一个例子:NVCC 编译器选项有什么作用 -gencode arch=compute_13,code=sm_13 嵌入库中? 只有
我为我的表格使用 X-editable 框架。 但是我有一些问题。 $(document).ready(function() { $('.access').editable({
我一直在通过本教程学习 flask/python http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-wo
我想将 Vim 和 EMACS 用于 CNC、G 代码和 M 代码。 Vim 或 EMACS 是否有任何语法或模式来处理这种类型的代码? 最佳答案 一些快速搜索使我找到了 this vim 和 thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve this
这个问题在这里已经有了答案: Enabling markdown highlighting in Vim (5 个回答) 6年前关闭。 当我在 Vim 中编辑包含 Markdown 代码的 READM
我正在 Swift3 iOS 中开发视频应用程序。基本上我必须将视频 Assets 和音频与淡入淡出效果合并为一个并将其保存到 iPhone 画廊。为此,我使用以下方法: private func d
pipeline { agent any stages { stage('Build') { steps { e
我是一名优秀的程序员,十分优秀!