Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C++; 我在VisualStudio中的C++项目中有C++文件。 C++文件有一个片段,其中一些应用程序使用系统< /COD> < /P>运行。 system("Files\\tx1"); system("Files\\tx2"); system("Files\\tx3"); system("Files\\tx4");_C#_C++ - Fatal编程技术网

C# 在C++; 我在VisualStudio中的C++项目中有C++文件。 C++文件有一个片段,其中一些应用程序使用系统< /COD> < /P>运行。 system("Files\\tx1"); system("Files\\tx2"); system("Files\\tx3"); system("Files\\tx4");

C# 在C++; 我在VisualStudio中的C++项目中有C++文件。 C++文件有一个片段,其中一些应用程序使用系统< /COD> < /P>运行。 system("Files\\tx1"); system("Files\\tx2"); system("Files\\tx3"); system("Files\\tx4");,c#,c++,C#,C++,我想用一些可以在一个地方更改的常量变量替换“Files”常量。类似于我们在C#中使用app.config文件等所做的操作。 直接硬编码常量不是一种好的做法。与C++的项目不同,C++项目没有设置文件。那么,在这种情况下我应该怎么做,有什么建议吗?因为app.config文件没有类似的机制,所以您必须自己旋转。有很多框架可以实现这一点 一种选择是使用。这允许将配置数据轻松序列化为各种文件格式 但是,您仍然需要创建一个全局对象来访问这些值。您可以简单地编写自己的小型设置解析器,这并不难,或者使用一些

我想用一些可以在一个地方更改的常量变量替换“Files”常量。类似于我们在C#中使用app.config文件等所做的操作。

直接硬编码常量不是一种好的做法。与C++的项目不同,C++项目没有设置文件。那么,在这种情况下我应该怎么做,有什么建议吗?

因为app.config文件没有类似的机制,所以您必须自己旋转。有很多框架可以实现这一点

一种选择是使用。这允许将配置数据轻松序列化为各种文件格式


但是,您仍然需要创建一个全局对象来访问这些值。

您可以简单地编写自己的小型设置解析器,这并不难,或者使用一些预先制作的库来读取某种配置文件(例如,您可以使用Windows API读/写ini文件,或者使用某种json/xml库)


我个人更喜欢这样的东西。

如果你想使用编译时方法(如C#中的
app.config
),你可以使用defines

形态h

#define FILES "mypath"
impl.c

#include "conf.h"
...

system(FILES "tx1");

当您喜欢运行时方法时,配置文件有许多格式/库。

我将创建一个类来为我实现这一点:

class Path
{
private:
    static const std::string prefix_;

public:
    static std::string get(const std::string& file)
    {
        return prefix_ + '\\' + file;
    };
}; // eo class Path
.cpp

现在,它很容易在其他任何地方使用:

system(Path::get("tx1").c_str());
system(Path::get("tx2").c_str());
system(Path::get("tx3").c_str());
system(Path::get("tx4").c_str());

在给定最少需要的数据的情况下,放置一个内联函数来返回适当的值,而不是常量:例如

inline const char *FileNum(int n) {
 static char buf[100];
 sprintf(buf, "Files\\txt%d", n);
 return buf;
}
打电话

system(FileNum(1));
...

你的标题有点误导人。我很确定app.config在运行时是可修改的。它是如何初始化的?@MooingDuck,请参阅.cpp文件,其中前缀uu是一个名称。它是一个完全静态的类。为什么要使用WinAPI而不是streams?为什么xml优于文本?取决于复杂性和可编辑性(sp?),这可能比重新发明轮子更好或更容易(假设一条路径不是读取的全部)。哦,有专门用于读取/写入ini文件的Windows API吗?据我所知,Wind95中只有一个不推荐使用,但可能还有其他我不知道的。
GetPrivateProfileString()
WritePrivateProfileString()
应该仍然可用(它们有点不推荐使用,但由于兼容性原因,afaik仍然可用)。我不会在一些公共产品中使用它们,但在内部材料和测试中应该可以使用。“此功能仅为与基于Windows的16位应用程序兼容而提供。”(我的重点)
system(FileNum(1));
...