如果文本文件大小超过最大大小,则动态创建文本文件

时间:2014-06-24 07:38:56

标签: c# asp.net .net

我正在使用StreamWriter使用以下代码将文本写入文件:

path == @"Desktop\";
filepath1 = path + "1.txt";
StreamWriter _sw = new StreamWriter(filepath1, true);
_sw.WriteLine("some Text");
_sw.Close();

如果textfile的大小超过500kb,我想动态创建文本文件。我正在尝试以下代码:

var size = (path.Length)/1024;

if(size>=500)
{
    int i = (size/500)+1;
    var filepath2 = path + i + ".txt";

    if (File.Exists(filepath2))
    {
        StreamWriter _sw = new StreamWriter(filepath2, true);
        _sw.WriteLine("Some message");
        _sw.Close();
    }
}
else
{
    FileStream fs = File.Create(filepath2);
    StreamWriter _sw = new StreamWriter(filepath2, true);
    _sw.WriteLine(ex);
    _sw.Close();
}

我的问题是,如果文件2.txt也超过500kb我想创建3.txt,4.txt .....等等.. 我想动态创建所有这些 - 如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

从哪里开始......

你正在把它写成一个很长的程序脚本。您需要将其分解为可以使用functions重用的块。事实上,它会过快失控。

path == @" Desktop \&#34 ;;无效。 1太多=

使用 Path.Combine()来合并文件夹和文件名。

我确定这只是测试/粗略/暂存代码,但万一它不是,也请查看尝试/取消来包装文件处理。您还应该查找使用()来处理您的流/编写器。

我的最后一点评论是,我经常看到很多这类代码,并且它常常可以用Nlog替代,以减少摩擦。

我会评论,但此登录没有代表。

答案 1 :(得分:0)

首先需要对File的数据长度进行SIZE比较,而不是文件路径。

这是功能,你想要实现的目标,请为你的路径做出适当的改变。

     //Public variable to manage file names
    int FileCounter = 1;

    string FileName;

    // Call this function to Add text to file
    private void WriteToFile(string writeText)
    {

        FileName = "MyFile_"+FileCounter +".txt";
        if (File.Exists(FileName))
        {
            string str = File.ReadAllText(FileName);

            if ((str.Length + writeText.Length) / 1024 > 500)  // check for limit
            {
                // Create new File
                FileCounter++;
                FileName = "MyFile_" + FileCounter + ".txt";
                StreamWriter _sw = new StreamWriter(FileName, true);
                _sw.WriteLine(writeText);
                _sw.Close();

            }
            else  // use exixting file
            {
                StreamWriter _sw = new StreamWriter(FileName, true);
                _sw.WriteLine(writeText);
                _sw.Close();
            }
        }

    }