Visual c++ 在vc+中删除文件的元素+; CStringArray myArray; myArray.copy(copiedsomeelements); CString file1=“myfile1”; CString file2=“myfile2”; 文件*fp1,*fp2; CString linetocompare=“mytext”; fp1=fopen(myfile1,“rb”); fread(数据,1280,1,fp1); fclose(fp1); TCHAR*pch=\u tcstok(数据,\u T(“\r\n”); fp2=fopen(myfile2,“w”)//打开新文件 对于(int m=0;m

Visual c++ 在vc+中删除文件的元素+; CStringArray myArray; myArray.copy(copiedsomeelements); CString file1=“myfile1”; CString file2=“myfile2”; 文件*fp1,*fp2; CString linetocompare=“mytext”; fp1=fopen(myfile1,“rb”); fread(数据,1280,1,fp1); fclose(fp1); TCHAR*pch=\u tcstok(数据,\u T(“\r\n”); fp2=fopen(myfile2,“w”)//打开新文件 对于(int m=0;m,visual-c++,mfc,Visual C++,Mfc,上面的代码对我来说很好,但不是一直都有效。有时它按原样写入“myfile2”,而不比较“linetocomapare”元素。 请帮我做这个。 如果需要澄清,请告诉我。谢谢。MFC有一个类,可以包装narly文件内容,并可以处理换行。这里有几个用于加载/保存文本文件的方便函数: CStringArray myArray; myArray.copy(copiedsomeelements); CString file1="myfile1"; CString file2="myfile2"; FILE

上面的代码对我来说很好,但不是一直都有效。有时它按原样写入“myfile2”,而不比较“linetocomapare”元素。 请帮我做这个。 如果需要澄清,请告诉我。谢谢。

MFC有一个类,可以包装narly文件内容,并可以处理换行。这里有几个用于加载/保存文本文件的方便函数:

CStringArray myArray;
myArray.copy(copiedsomeelements);
CString file1="myfile1";
CString file2="myfile2";
FILE *fp1,*fp2;
CString linetocompare="mytext";
fp1 = fopen(myfile1, "rb");
fread(data, 1280, 1, fp1);
fclose(fp1);
TCHAR * pch = _tcstok(data, _T("\r\n"));


fp2 = fopen(myfile2, "w"); //open new file

for (int m = 0; m < myArray.GetCount(); m++)
{
        CString temp(pch);
        if (strcmp(myArray.GetAt(m), linetocompare) != NULL)
        {
                fprintf(fp2, "%s", temp); 
                fwrite("\r\n", 1, 1, fp2);
        }
        pch = _tcstok(NULL, _T("\r\n"));
}
fclose(fp2);
remove(myfile1); //remove old file
rename(myfile2, myfile1);
void ReadTextFileContents(CString const&filePath,
卡雷公司,
UINT openFlags=CFile::modeRead | CFile::shareDenyWrite)
{
CSTDOIFILE文件(文件路径、openFlags);
尝试
{
CString线;
while(file.ReadString(行))
行。添加(行);
file.Close();
}
捕获(…)
{
file.Abort();
投掷;
}
}
无效WriteTextFileContents(CString常量和文件路径,
卡雷常数和线,
UINT openFlags=CFile::modeCreate | CFile::modeWrite|
CFile::shareExclusive)
{
CSTDOIFILE文件(文件路径、openFlags);
尝试
{
对于(INT_PTR i=0,count=lines.GetCount();i
现在您可以执行以下操作:

void ReadTextFileContents(CString const& filePath,
    CArray<CString>& lines,
    UINT openFlags = CFile::modeRead | CFile::shareDenyWrite)
{
    CStdioFile file(filePath, openFlags);

    try
    {
        CString line;
        while (file.ReadString(line))
            lines.Add(line);
        file.Close();
    }
    catch (...)
    {
        file.Abort();
        throw;
    }
}

void WriteTextFileContents(CString const& filePath,
    CArray<CString> const& lines,
    UINT openFlags = CFile::modeCreate | CFile::modeWrite |
    CFile::shareExclusive)
{
    CStdioFile file(filePath, openFlags);

    try
    {
        for (INT_PTR i = 0, count = lines.GetCount(); i < count; ++i)
        {
            file.WriteString(lines[i]);
            if (i < (count - 1))
            {
                // NOTE: The default mode for CStdioFile is text mode
                // MSDN: Text mode provides special processing for carriage
                // return-linefeed pairs. When you write a newline character
                // (0x0A) to a text-mode CStdioFile object, the byte pair
                // (0x0D, 0x0A) is sent to the file. When you read, the
                // byte pair (0x0D, 0x0A) is translated to a single 0x0A
                // byte.
                file.WriteString(_T("\n"));
            }
        }
        file.Close();
    }
    catch (...)
    {
        file.Abort();
        throw;
    }
}
试试看
{
卡雷线;
ReadTextFileContents(文件名、行);
//对行执行所需操作,删除项目,复制到
//另一个数组等。
//现在把它们写在某个地方
WriteTextFileContents(文件名2,行);
}
捕获(CEException*ex)
{
//抓取并在此处显示错误消息
//ex->GetErrorMessage();
ex->Delete();
}

您正在读取任意数据块。例如,这些不需要包含完整的
“\r\n”
序列,也不能保证您的搜索项不跨越连续的块。由于这个问题被标记,所以你应该使用C++。即:。不过,这段代码中还有很多错误。请查阅您的入门书籍。谢谢您帮助我提高。
    try
    {
        CArray<CString> lines;
        ReadTextFileContents(fileName, lines);

        // Do what you want with lines, remove items, copy to
        // another array, etc.

        // Now write them somewhere
        WriteTextFileContents(fileName2, lines);
    }
    catch (CException* ex)
    {
        // Grab and display error message here
        //ex->GetErrorMessage();

        ex->Delete();
    }