srilekhamenon Ответов: 3

Как портировать функцию C++ на C#


iam портирование функции c++ на c#

код c++ - это

int CCategory::CheckFileOrFolder(CString str)
{
	int iRet = -1;

	try
	{
		const DWORD dwFileAttr = GetFileAttributes(str);

		if (dwFileAttr == DWORD(-1)) // file not found
		{
			iRet = -1;		// nothing
		} 
		else if (dwFileAttr & FILE_ATTRIBUTE_DIRECTORY)
		{
			iRet = 0;		//folder
		}
		else	
			iRet = 1;		// file
	}
	catch(...)
	{
	}

	return iRet;
}


вывод функции будет другим, если я передам следующую строку
C:\Windows\System32\speech\speechux\sapi.cpl,-5566


пожалуйста помочь

Что я уже пробовал:

и мой код C# является

public int CheckFileOrFolder(string str)
        {
            int iRet = -1;
            try
            {

                FileAttributes attr = System.IO.File.GetAttributes(str);
                //var files = Directory.GetFiles(@"c:\windows\system32\");

                if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    iRet = 0;		//folder
                }
                else
                    iRet = 1;		// file
            }
            catch (Exception ex)
            {
                //File not found
                iRet = -1; // nothing
            }

            return iRet;
        }

CPallini

Какой другой результат вы получаете?

srilekhamenon

извините, что я отправил неправильную строку в коде c++, теперь я получаю -1 в обоих случаях

Richard MacCutchan

Когда вы ловите исключение, вы всегда должны печатать детали, включая сообщение.

3 Ответов

Рейтинг:
1

KarstenK

Ваш ввод - это не допустимый путь,а путь с добавлением", -5566". В этом случае метод GetAttribute Функция C может возвращать некоторое значение, которое не работает корректно с кодом if / else, но Системы.ИО.Файл.метод GetAttribute правильно ли выбрасывать исключение.

Используйте отладчик, чтобы посмотреть на детали, чтобы найти проблему.


Рейтинг:
0

Nasreddine FAREH

CheckFileOrFolder(@"C:\Windows\System32\speech\speechux\sapi.cpl");


return == 1 С c++ и C#


Рейтинг:
0

Nasreddine FAREH

Привет ,

Вы можете использовать это решение .

также вы можете использовать эту IDE : Бесплатных Версий Продукта [^]

public int CheckFileOrFolder(string str)
{
			int iRet = -1;
			try
			{

				FileAttributes attr = System.IO.File.GetAttributes(str);
				//var files = Directory.GetFiles(@"c:\windows\system32\");

				if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
				{
					iRet = 0; //folder
				}
				else
				{
					iRet = 1; // file
				}
			}
			catch (Exception ex)
			{
				//File not found
				iRet = -1; 
			}

			return iRet;
}