创建文件,检查是否存在另一个具有相同名称的文件

时间:2014-08-16 14:04:31

标签: c++ file filenames

代码(main.cpp)(C ++):

  #include <string>
  #include <sstream>
  #include <stdio.h>
  #include <stdlib.h>
  #include <ctime>


  //general vars
  std::ofstream ofs;
  std::ifstream ifs;
  std::stringstream ss;

  //spamFiles vars
  std::string defPath;
  int defAmt;

  void spamFiles(std::string paramPath);

  int main(int argc, const char * argv[])
  {
      srand(time_t(NULL));
      std::cout << "Enter the amount of files: ";
      std::cin >> ::defAmt;

      std::cout << "Now enter the target path: ";
      std::cin >> ::defPath;
      ::spamFiles(::defPath);
       std::cout << defAmt << " files were created." << std::endl;
      return 0;
  }

  void spamFiles (std::string paramPath){
//system("open -a Terminal .");
for(int i = 0; i < ::defAmt; i++){

    std::string tempS;
    int ranNum = rand() % 501;
    ss << ranNum;
    std::string ssResult = ss.str();
    std::string finalPath = ::defPath + ssResult + ".txt";
    ifs.open(finalPath);
    if(ifs.good()){
    finalPath += "dupe.txt";
        while(ifs.good()){
        finalPath += "dupe.txt";
        ifs.open(finalPath);
    }
    }
    ofs.open(finalPath);
    ofs << "";
    ofs.close();
    ss.str(std::string());
      }
      return;
  }

我的问题在于。

每当我运行并输入时,请说53金额,最后它永远不会创建完整数量的文件。它总是按比例缩放。

以下是一个例子。

定义的不是:300 - &gt;我得到的:240

定义金额:20 - &gt;我得到了什么:15

定义金额:600 - &gt;我得到的:450

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据代码的逻辑,如果ifstream对象不是'good()',则创建一个文件。如果没有创建某些文件,那么错误就在这里。

通过一些挖掘,你会发现ifstream对象的constructor不是一个字符串,而是一个char *。

在'finalPath'变量中添加c_str()应该可以解决这个问题。

有些注意事项:

  • 你忘了包含fstream和iostream。
  • 在深入研究此类问题时,请勿使用随机数作为第一个测试用例。通过尝试按数字顺序创建文件,我更容易复制您的问题。
  • 也不要忘记'close()'你的ifstreams!

我对代码的改编:

#include <string>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <ctime>

#include <fstream>
#include <iostream>

//general vars
std::ofstream ofs;
std::ifstream ifs;
std::stringstream ss;

//spamFiles vars
std::string defPath;
int defAmt;

void spamFiles(std::string paramPath);

int main(int argc, const char * argv[])
{
    srand(time_t(NULL));
    std::cout << "Enter the amount of files: ";
    std::cin >> ::defAmt;

    std::cout << "Now enter the target path: ";
    std::cin >> ::defPath;
    ::spamFiles(::defPath);
    std::cout << defAmt << " files were created." << std::endl;
    return 0;
}

void spamFiles (std::string paramPath){
    //system("open -a Terminal .");

    for(int i = 0; i < ::defAmt; i++){     
        std::string tempS;
        int ranNum = rand() % 501;
        ss << ranNum;
        std::string ssResult = ss.str();
        std::string finalPath = ::defPath + ssResult + ".txt";
        ifs.open(finalPath.c_str());

        while(ifs.good()){
            finalPath += "dupe.txt";
            ifs.open(finalPath.c_str());
        }
        ifs.close();
        std::cout << finalPath << std::endl;

        ofs.open(finalPath.c_str());
        ofs << "";
        ofs.close();

        ss.str(std::string());
    }
    return;
}