C++删除带有文件系统库的文件不起作用

yqlxgs2m  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个用C编写的俄罗斯轮盘赌脚本。如果两个随机生成的数字相同,脚本将删除指定的文件。
人们建议我应该使用C
17来使用<filesystem>库,以便正确运行与文件相关的操作。如果条件匹配,删除操作将运行。if块正确运行,但删除文件不会发生。

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <filesystem>
//include filesystem and replace remove() with filesystem libs remove function

using namespace std;
namespace fs = std::filesystem;

int main(){
    int minNumber = 1, maxNumber = 6;
    int possibility,chamberNumber;
    srand(time(0));
    possibility = rand() % (maxNumber - minNumber + 1 ) + minNumber;
    chamberNumber = rand() % (maxNumber - minNumber + 1 ) + minNumber;
    cout << "First Number: " <<possibility<<endl<<"Second Number: " << chamberNumber<< endl;

    if (possibility == chamberNumber){
        std::filesystem::remove("C:\\Users\\mypath\\Desktop\\cppRoulette\\delete.txt"); 
        cout << "You're Dead " <<possibility<< endl;
        
    }
    // else{
    // cout << possibility << endl;
    // }

    return 0;
}

我使用下面这行代码来编译我的代码:

g++ -std=c++17 rulet.cpp -o output

下面是编译后输出的屏幕截图,注意"delete.txt"仍然有效。

我用的是WSL Debian,因为我用的是VS代码,本地终端不能正常的与g一起工作。不过我可能更喜欢Linux的流畅性。
我正在寻找一种合适的和更简单的方法来处理文件,就像在Python中一样。我正在参加一个C
速成班,所以我试图学习它,切换到Python是不可能的。

ubbxdtey

ubbxdtey1#

您的文件路径错误。我刚刚通过将路径从E:\Test\delete.txt更改为/mnt/e/Test/delete.txt,使您的代码在我的系统上工作。
在WSL下,所有Windows驱动器(C:E:等)都安装在/mnt目录下,位于与驱动器号(/mnt/c//mnt/e/等)匹配的子目录中。要转换Windows路径以在WSL中使用,您需要执行以下操作:
1.将所有反斜杠(\)替换为正斜杠(/)。
1.删除驱动器号后面的冒号(:)。
1.将驱动器号转换为小写。
1.将字符串"/mnt/"添加到路径前面。
在此之后,您的程序工作,并将删除目标文件。

相关问题