程序运行三次,得到三个不同的结果

Cry*_*nes 1 c#

我编写了这个程序来将EDI文件切割成他们自己的文件,但它并没有这样做.有时它会将包含三个部分的文件分成两个部分,有时则会找到所有三个部分.

任何人都可以向我解释为什么这样做?任何帮助是极大的赞赏.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace chomp
{
    class Program
    {
        static string GenerateFileName(string context)
        {
            return context + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".edi"; 
        } 
        static int Main(string[] args)
        {
            string delimiter = "\r\n\r\n";
            if (args.Length == 0)
            {
                Console.WriteLine("Please enter a file name: ");
                return 1;
            }
            else
            {
                try
                {
                    string fileName = (args[0]);
                    if (File.Exists(fileName)){
                    System.IO.StreamReader myFile =
                    new System.IO.StreamReader(fileName);
                    string FileStream = myFile.ReadToEnd();
                    myFile.Close();

                    string myFileName = GenerateFileName("DOC");
                    string[] FSPart = FileStream.Split(new string[] { delimiter }, StringSplitOptions.None);

                    foreach (string s in FSPart)
                    {
                        string newAwesomeFN = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".edi"; 
                        using (System.IO.FileStream fs = System.IO.File.Create(newAwesomeFN))
                        {
                        }

                        System.IO.StreamWriter file = new System.IO.StreamWriter(newAwesomeFN);
                        file.WriteLine(s);
                        file.Close();
                    }
                    return 0;
                    } else {
                        System.Console.WriteLine("Filename "+ fileName+ " does not exist!");
                        return 0;
                    } // closes else + if File.Exists
                }
                catch (System.FormatException)
                {
                    Console.WriteLine("A Filename must be entered!");
                    return 1;
                }
            }
        } //closes main
    } //closes program
} //closes main
Run Code Online (Sandbox Code Playgroud)

que*_*atl 7

幸运的是,它可能多次生成相同的文件名.您的"随机文件名"可能不够随机.尝试使用简单的静态计数器

public static int filenumber = 0;
Run Code Online (Sandbox Code Playgroud)

每一次增加它,你生成一个文件名,而不是使用DateTimefff精度*).这样做并重试运行程序.如果是问题,它将修复它.

如果这不能解决问题,我会考虑更多;)

*)你看,DateTime它实际上是偶尔刷新的,就像每隔几毫秒一样.你的循环肯定循环更快.它不是"高性能"时间戳.如果您想要更好的'时间戳',请使用Stopwatch.它是高性能的,也许不是最好的,但很好.