簡體   English   中英

C#-寫入時檢查文件大小-中間更改文件

[英]C# - Check file size while writing - Change file in middle

我遍歷目錄並在其中獲取文件循環時,我正在使用StreamWriter將文件的全路徑名寫入文件。我的問題是我必須控制文件的大小-它不能超過60K

我該怎么做?

我試圖像這樣在循環中間更改streamwriter:

if (myPaths.Length >= 60000)
{
    outFile = "c:\\tag\\GS_dirData_" + (FileCounter += 1).ToString() + ".txt";
    StreamWriter myStream = new StreamWriter(outFile);
}    

但是我收到錯誤消息,提示我無法執行此操作

這是我的完整代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using Microsoft.Win32;
using System.Globalization;
using System.Windows.Forms;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo("c:/myDir/");
        string outputFile = "c:\\dirA\\PathsFile.txt";
        StreamWriter sw = new StreamWriter(outputFile);

        string doneFile = "c:\\dirA\\ConfirmComplete.txt";
        if (File.Exists(doneFile)) File.Delete(doneFile);

        int ct = 0;

        ct = getAllFiles(di, "*.i", sw, outputFile);

        StreamWriter myDoneFile = new StreamWriter(doneFile);
        myDoneFile.AutoFlush = true;
        myDoneFile.WriteLine("Done");
        myDoneFile.WriteLine("Processed " + ct.ToString() + " files");
        myDoneFile.WriteLine("File Size = "+outputFile.Length.ToString());
    }


    static int getAllFiles(DirectoryInfo dir, string searchPattern, StreamWriter myStream, string outFile) 
    {
        var directories = dir.GetFiles(searchPattern, SearchOption.AllDirectories);
        int counter = 0;
        int FileCounter = 1;
        foreach (var file in directories)
        {
            if (file.FullName.Contains("\\BAK\\")) continue;
            myStream.WriteLine(file.FullName);
            counter += 1;
            FileInfo myPaths = new FileInfo(outFile);
            if (myPaths.Length >= 60000)
            {
                myStream.Close();
                outFile = "c:\\dirA\\GS_dirData_" + (FileCounter += 1).ToString() + ".txt";
                StreamWriter myStream = new StreamWriter(outFile);
            }
        }
        return counter;
    }
}

}

任何幫助將不勝感激,我很樂意接受任何增強的想法

謝謝大衛

嘗試將代碼更改為此:

        if (myPaths.Length >= 60000)
        {
            myStream.Close();
            outFile = "c:\\dirA\\GS_dirData_" + (FileCounter += 1).ToString() + ".txt";
            myStream = new StreamWriter(outFile);
        }

您正在if語句內部創建局部范圍的變量。 您需要將新的StreamWriter設置為范圍為myStream的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM