【问题标题】:How to avoid problems with "\" in files name in C?如何避免 C 中文件名中的“\”问题?
【发布时间】:2018-10-26 04:49:27
【问题描述】:

在 C# 中,当您需要操作文件时,可以使用 @ 符号来避免更改文件名中的“\”。

例子:

string fileName = @"C:\Users\username\Documents\text.txt";

但在 C 中我不能使用 @ 符号。所以我必须将“\”替换为“/”或使用“\”:

fopen = ("C:/Users/username/Documents/text.txt","r");

fopen = ("C:\\Users\\username\\Documents\\text.txt","r");

C 中有什么技巧可以避免所有这些工作吗?

【问题讨论】:

  • 使用正斜杠需要做哪些额外的工作?这对您来说是一个真正的问题,还是您只是想知道?

标签: c file-io fopen


【解决方案1】:

在大多数情况下,不要在源文件中放置绝对文字路径名,尤其是带有 Windows 特定符号的路径名。从某种输入数据加载或构造路径名,这样您的程序就不会被锁定在您开发它的机器的文件系统布局中。

【讨论】:

    【解决方案2】:

    您可以编写一个小辅助函数来将所有退格转换为前进空格。

    void fileconvert(char *filename)
    {
        while(*filename !='\0')
        {
            if (*filename == '\')
            {
                *filename = '/';
            }
            filename++;
        }
    }
    

    你可以如下使用它。

    FILE *fp;
    char filename[] = "C:/Users/username/Documents/text.txt";
    
    fileconvert(filename);
    fp = fopen(filename,"r");
    

    这可能是@ 运算符在C# 中的工作方式

    【讨论】:

    • 这段代码甚至不会编译,也不会像 OP 想要的那样做。此外,如果 OP 可以使用正斜杠,则无需进行任何转换。 Windows(和 DOS)总是支持正斜杠。
    • 请参考stackoverflow.com/questions/11466139/… 获取正斜杠。关于编译 - 给出的代码是一个 sn-p 而不是完整的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2014-07-12
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多