首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从文件中读取并通过命令行复制其内容

从文件中读取并通过命令行复制其内容
EN

Stack Overflow用户
提问于 2020-09-19 00:33:29
回答 1查看 61关注 0票数 0

我希望读取一个文件并将其内容复制到作为命令行参数传递的所有文件中,例如:

main.exe file.txt todo.txt app.txt foo.txt

从file1读取数据,并将其内容复制到todo、app和foo。如果文件不存在,请提示用户,如果用户想要创建文件,请输入。

ReadFile函数工作并返回文件数据。

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char* ReadFile(const char* filename) {...}

void WriteFile(const char* filename, const char* data) {
    FILE* fptr = fopen(filename, "r+");
    if (fptr)
        std::cout << filename << " opened Succesfully.\n";
    else {
        std::cout << "\nFile not found! Do you want to create one?\n";
        std::cout << "Type Y, y or 1 to create the file that doesn't exist press any other key to exit\n";
        std::string input;
        std::cin >> input;
        while (input.at(0) == 'Y' || input.at(0) == 'y' || input.at(0) == '1') {
            fptr = fopen(filename, "w");
            if (fptr) {
                std::cout << filename << " created Succesfully\n";
                break;
            } else {
                std::cout << "Error creating " << filename << std::endl;
                break;
            }
        }
        while (input.at(0) != 'Y' || input.at(0) != 'y' || input.at(0) != '1') {    
            exit(0);
        }
    }
    while ((*data)) {
        fputc(*data, fptr);
        ++data;
    }
    if (!fclose(fptr))
        std::cout << filename << " closed\n";
    else 
        std::cout << "Error closing " << filename << std::endl;

}
int main(int argv, const char* argc[]) {
    const char* FileBuffer = ReadFile(argc[1]);
   
    for (int i = 2; i < 10; ++i) {
        if (argc[i] != (char)0 )
            WriteFile(argc[i], FileBuffer);
    }
    return 0;
}

现在的问题是,每当我创建一个不存在的文件时,它就会打印:“成功创建的文件”并退出,但内容永远不会被复制

第二:我不能写入一个包含多个参数的文件(),该文件不存在示例:

main.exe file.txt todo.txt app.txt foo.txt

在这里,file.txt被成功地读取,然后它问我是否要创建一个文件,我输入"y“它打印”成功创建的文件“并退出,但内容从未被复制。

但是,如果文件存在,则代码工作正常,内容被复制到所有文件中。

注意:我没有使用fstream,因为我在读写方面有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-19 00:42:17

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while (input.at(0) != 'Y' || input.at(0) != 'y' || input.at(0) != '1')

总是正确的,所以程序总是退出,所以您打算编写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while (input.at(0) != 'Y' && input.at(0) != 'y' && input.at(0) != '1')

在将否定与andor组合时,逻辑错误是常见的错误。

由于while循环的主体总是退出程序,因此编写if语句而不是while语句会更清楚一些。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (input.at(0) != 'Y' && input.at(0) != 'y' && input.at(0) != '1')
    exit(0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63966820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文