读取和解析文本文件异常-C#

时间:2014-11-14 13:34:01

标签: winforms c#-4.0

我正在解析大文本文件并且它工作正常一段时间但是几分钟后它就给我异常(System.Core.dll中发生了'System.UnauthorizedAccessException'类型的未处理异常

其他信息:拒绝访问路径。)

我在下面提到的行上有例外。

accessor = MemoryMapped.CreateViewAccessor(offset, length, MemoryMappedFileAccess.Read);

以下是我的功能

public static void CityStateZipAndZip4(string FilePath,long offset,long length,string spName)
    {
        try
        {

            long indexBreak = offset;
            string fileName = Path.GetFileName(FilePath);
            if (fileName.Contains(".txt"))
              fileName =  fileName.Replace(".txt", "");

            System.IO.FileStream file = new System.IO.FileStream(@FilePath, FileMode.Open,FileAccess.Read, FileShare.Read );

            Int64 b = file.Length;
            MemoryMappedFile MemoryMapped = MemoryMappedFile.CreateFromFile(file, fileName, b, MemoryMappedFileAccess.Read, null, HandleInheritability.Inheritable, false);

            using (MemoryMapped)
            {

                //long offset = 182; // 256 megabytes 
                //long length = 364; // 512 megabytes 


                MemoryMappedViewAccessor accessor = MemoryMapped.CreateViewAccessor(offset, length, MemoryMappedFileAccess.Read);


                byte byteValue;
                int index = 0;
                int count = 0;
                StringBuilder message = new StringBuilder();
                do
                {
                    if (indexBreak == index)
                    {
                        count = count + 1;
                        accessor.Dispose();

                        string NewRecord = message.ToString();
                        offset = offset + indexBreak;
                        length = length + indexBreak;
                        if (NewRecord.IndexOf("'") != -1)
                        { NewRecord = NewRecord.Replace("'", "''"); }

                       // string Sql = "insert into " + DBTableName + " (ID, DataString) values( " + count + ",'" + NewRecord + "')";
                        string Code = "";
                        if (spName == AppConfig.sp_CityStateZip)
                        {
                            Code = NewRecord.Trim().Substring(0, 1);

                        }

                        InsertUpdateAndDeleteDB(spName, NewRecord.Trim (), Code);
                        accessor = MemoryMapped.CreateViewAccessor(offset, length, MemoryMappedFileAccess.Read);
                        message = new StringBuilder();
                        index = 0;

                        //break;
                    }

                    byteValue = accessor.ReadByte(index);
                    if (byteValue != 0)
                    {
                        char asciiChar = (char)byteValue;
                        message.Append(asciiChar);
                    }
                    index++;
                } while (byteValue != 0);

            }
            MemoryMapped.Dispose();
        }

        catch (FileNotFoundException)
        {

            Console.WriteLine("Memory-mapped file does not exist. Run Process A first.");
        }

    }

2 个答案:

答案 0 :(得分:0)

此异常表示您的程序无法从Windows Read访问该文件 当程序试图读取时,您确定该文件未被锁定吗? 例如,它可能是您自己的程序当前使用的文件 如果没有,请尝试以管理员身份运行您的程序,看看它是否有所作为。

答案 1 :(得分:0)

在资源处理代码的深处,我们有类似的东西:

try {
// Try loading some strings here.
} catch {
// Oops, could not load strings, try another way.
}

已经抛出并处理异常,它永远不会出现在您的应用程序中。查看它的唯一方法是附加调试器并观察此消息。

从代码中可以看出,它与您的问题无关。这里真正的问题是调试器向您展示了一些您不应该看到的东西。

运行没有调试模式的解决方案,它运行正常。