【问题标题】:Creating files in C++在 C++ 中创建文件
【发布时间】:2009-01-25 19:15:12
【问题描述】:

我想使用 C++ 创建一个文件,但我不知道该怎么做。例如,我想创建一个名为Hello.txt 的文本文件。

谁能帮帮我?

【问题讨论】:

    标签: c++ file-io


    【解决方案1】:

    一种方法是创建 ofstream 类的一个实例,并使用它来写入您的文件。这是一个网站链接,其中包含一些示例代码,以及有关大多数 C++ 实现中可用的标准工具的更多信息:

    ofstream reference

    为了完整起见,这里有一些示例代码:

    // using ofstream constructors.
    #include <iostream>
    #include <fstream>  
    
    std::ofstream outfile ("test.txt");
    
    outfile << "my text here!" << std::endl;
    
    outfile.close();
    

    您想使用 std::endl 来结束您的行。另一种方法是使用 '\n' 字符。这两件事是不同的,std::endl 刷新缓冲区并立即写入您的输出,而 '\n' 允许 outfile 将所有输出放入缓冲区并可能稍后再写入。

    【讨论】:

    • 更不用说 std::endl 也写入正确的平台特定换行符字符串。
    • 致林伯格:那是错误的。 "endl: Effects: 调用 os.put(os.widen('\n')),然后调用 os.flush()" -- C++ 标准,27.6.2.7/1
    • @Grant Limberg: '\n' 也写入了正确的平台特定换行符——它由 ostream 内部进行了适当的翻译。
    • @James Thompson:使用 std::endl 的唯一原因是如果您确实需要保证缓冲区立即刷新到文件中。否则,这是一个不必要的悲观(文件 i/o 非常昂贵!)。
    • 使用 ofstream 写入文件时,不执行文件锁定。其他人可以读取写入一半的文件,也可以打开另一个ofstream并同时写入。
    【解决方案2】:

    使用文件流执行此操作。当std::ofstream 被关闭时,文件被创建。我更喜欢下面的代码,因为 OP 只要求创建一个文件,而不是在其中写入:

    #include <fstream>
    
    int main()
    {
        std::ofstream { "Hello.txt" };
        // Hello.txt has been created here
    }
    

    流在创建后立即被销毁,因此流在析构函数中关闭,因此文件被创建。

    【讨论】:

    • 这是正确答案,问题只是:“如何用 C++ 创建文件”。
    • 如何从 ( ) 更改为 { } 使其创建文件并关闭?
    • @Jackt 这不是(){},只是由于析构函数正在运行。但你是对的,有一个错误。我已经恢复到以前的版本,有一个错误的版本。
    • 更好,tnx!
    【解决方案3】:
    #include <iostream>
    #include <fstream>
    
    int main() {
      std::ofstream o("Hello.txt");
    
      o << "Hello, World\n" << std::endl;
    
      return 0;
    }
    

    【讨论】:

    • 使用 std::endl 时,字符串中的 \n 是多余的。
    • 返回0;在函数中使用“int main()”时是多余的
    • endl 不仅仅是刷新:它也输出一个换行符。所以要么打印 \n 然后 std::flush,或者只使用 std::endl。
    • 流在销毁时被刷新,所以在这种情况下 std::endl 是完全多余的。但是,“返回 0”绝对不是多余的。在 C 中暗示“返回 0”是很常见的情况,但在 C++ 中则不然。
    • @Tom: basic.start.main: "如果控制在没有遇到return语句的情况下到达main的末尾,效果就是执行:return 0;"。
    【解决方案4】:

    这是我的解决方案:

    #include <fstream>
    
    int main()
    {
        std::ofstream ("Hello.txt");
        return 0;
    }
    

    即使没有ofstream名称也会创建文件(Hello.txt),这与Boiethios先生的回答不同。

    【讨论】:

    • 女士们,先生们,请让我告诉你们,当有人问如何获得某个结果并阅读答案时,认为答案中的一切都是获得这个结果所必需的。为此,答案应仅包括获得所需结果所需的内容。问候。
    • 警告:如果原始的“Hello.txt”被一个已经存在的变量替换,这不会为 MSVC17 编译。
    【解决方案5】:
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    string filename = "/tmp/filename.txt";
    
    int main() {
      std::ofstream o(filename.c_str());
    
      o << "Hello, World\n" << std::endl;
    
      return 0;
    }
    

    这是我必须做的,以便使用文件名的变量而不是常规字符串。

    【讨论】:

      【解决方案6】:

      使用c方法FILE *fp =fopen("filename","mode"); fclose(fp); mode 表示 a 用于追加 r 阅读,w 写作

         / / using ofstream constructors.
            #include <iostream>
             #include <fstream>  
            std::string input="some text to write"
           std::ofstream outfile ("test.txt");
      
          outfile <<input << std::endl;
      
             outfile.close();
      

      【讨论】:

        【解决方案7】:
        /*I am working with turbo c++ compiler so namespace std is not used by me.Also i am familiar with turbo.*/
        
        #include<iostream.h>
        #include<iomanip.h>
        #include<conio.h>
        #include<fstream.h> //required while dealing with files
        void main ()
        {
        clrscr();
        ofstream fout; //object created **fout**
        fout.open("your desired file name + extension");
        fout<<"contents to be written inside the file"<<endl;
        fout.close();
        getch();
        } 
        

        运行程序后,该文件将在编译器文件夹本身的 bin 文件夹中创建。

        【讨论】:

          猜你喜欢
          • 2015-03-05
          • 2010-12-14
          • 2010-09-05
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多