Функция чтения строки файла C# отключена после использования библиотеки dll(бесконечное ожидание)

#c# #c #file #dllimport #file.readalllines

Вопрос:

Порядок работы моей программы таков (Создать файл с помощью вызова dll -> Прочитать созданный файл)

Но это не работает.

После вызова dll функция ReadAllLine не работает и переходит в состояние бесконечного ожидания. Используемый процессор также равен 0.

Как запустить функцию и прочитать файл?

 [DllImport("Pcap_Parsing.dll", EntryPoint = "DEC_Parsing", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]

string FilePath = "file~~~/~~~/~~~.pcap"
string[] FileLines;

public static extern void DEC_Parsing(string fn);

Parsing(FilePath); //file create test.ini
FileLines = System.IO.File.ReadAllLines(~~~~path/test.ini); //When this function is executed, the cpu usage becomes 0 and it is in an infinite wait state. 
 

Комментарии:

1. Никогда не слышал об этой библиотеке DLL. Попытался погуглить его, но безрезультатно. У вас есть ссылка, возможно, на какую-нибудь документацию по API для Pcap_Parsing.dll? Кроме того, разве строка [DllImport()] не должна быть чуть выше public static extern void DEC_Pparsing(string fn); ? Строковый путь к файлу и строковые[] линии файлов кажутся мне странными / странными. В теории, если Pcap_Parsing. dll написана правильно, она должна открыть файл, прочитать / записать содержимое, а затем закрыть файл, освободив его. Если вы застряли на линиях чтения, может быть, все еще существует блокировка файлов?

2. Кроме того, я ничего не знаю о Pcap, кроме файла. Строки чтения могут создавать многочисленные / различные исключения. У вас есть это в блоке try catch, и он не создает никаких исключений? Обычно, если есть блокировка файла и вы пытаетесь вызвать файл. ReadAllLines, он должен выдавать исключение (не могу вспомнить, происходит ли это немедленно или есть тайм-аут, но он определенно не должен просто сидеть и ждать).

3. Библиотека dll-это то, что я создал. ЗАКРЫТИЕ ФАЙЛА выполняется в DLL. Исключение не создается и не может быть обработано.

Ответ №1:

файлы pcap не являются текстовым файлом, я думаю, что трудно использовать метод чтения строк в строку[]. попробуйте это без разбора, это может сработать, так как все файлы, сохраненные на устройствах, являются двоичными файлами.

     [DllImport("Pcap_Parsing.dll", EntryPoint = "DEC_Parsing", ExactSpelling = 
    true, CallingConvention = CallingConvention.Cdecl)]

    string FilePath = "file~~~/~~~/~~~.pcap"
    string[] FileLines;
    
    public static extern void DEC_Parsing(string fn)
    {
        var FileLines = System.IO.File.ReadAllBytes(filePath);

        string fileDecode = Encoding.ASCII.GetString(FileLines);
    } 
 

Комментарии:

1. Извините, что я случайно написал ini как pcap. Изменено и переписано