#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. Изменено и переписано