Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2011, 19:44   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию WinApi+C#

Как использовать функции Ain Api на C#?
И ещё. Кто знает класс на шарпе, который позволяет просматривать содержимое папки. Ну например. Имеется какая-то папка, а мне хочется посмотреть что там за файлы и папки внутри.
Dimarik вне форума Ответить с цитированием
Старый 16.04.2011, 19:49   #2
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

И ещё. на C++ можно было выбрать пустой проект (чтобы не вызывалось ни окошко ни форма). Как это сделать на C#? Так как для выполнения программы совсем не обязательно наличие какого-либо интерфейса.
Dimarik вне форума Ответить с цитированием
Старый 16.04.2011, 19:57   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Dimarik Посмотреть сообщение
Как использовать функции Ain Api на C#?
И ещё. Кто знает класс на шарпе, который позволяет просматривать содержимое папки. Ну например. Имеется какая-то папка, а мне хочется посмотреть что там за файлы и папки внутри.
1. Если по нормальному писать, WinAPI не понадобятся, советую пересмотреть ваш подход.
2. System.Directory
BOBAH13 вне форума Ответить с цитированием
Старый 16.04.2011, 20:00   #4
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

а как сделать проект без интерфейса?
Dimarik вне форума Ответить с цитированием
Старый 16.04.2011, 21:38   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

с Делфи знакомы?
если да, то примерно так же:
1)создайте приложение Windows Forms
2)удалите свою форму с проекта
3)проверьте чтоб в файле program.cs не осталось на нее ссылок.
собственно в последнем и будет вам код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.04.2011, 22:07   #6
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

понял. спасибо
Dimarik вне форума Ответить с цитированием
Старый 17.04.2011, 11:44   #7
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

так и не получилось сделать копирование всех файлов со съёмного носителя.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;

namespace copy
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void copyFiles(string path_1, string driveName, string VolumeLabel)
        {
            string[] strForCatalogs = Directory.GetDirectories(path_1);
            string strDirectory = path_1;
            strDirectory.Replace(driveName, "C:\\" + VolumeLabel);//НЕ РАБОТАЕТ!!!!!
                char[] c = strDirectory.ToCharArray();
                c[0] = 'C';
                strDirectory = "";
                foreach (char c_char in c)
                    strDirectory += c_char;
            string[] strFiles = Directory.GetFiles(path_1);
            //копируем файлы
            foreach (string s_1 in strFiles)
                Directory.Move(s_1, strDirectory);
            //работаем с папками на другом иеррхическом уровне
            foreach (string str_path_1 in strForCatalogs)
            {
                copyFiles(str_path_1, driveName, VolumeLabel);       
             }
        }

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            DriveInfo[] allDrives = DriveInfo.GetDrives();
            foreach (DriveInfo d_info in allDrives)
            {
                if (d_info.IsReady)
                {
                    if ((d_info.TotalSize > 1000000) && (d_info.DriveType == DriveType.Removable))
                    {
                        copyFiles(d_info.Name, d_info.Name, d_info.VolumeLabel);                        
                    }
                }
            }
        }
    }
}
Во-первых, хотел сделать
strDirectory.Replace(driveName, "C:\\" + VolumeLabel);//НЕ РАБОТАЕТ!!!!!
Но почему-то не работает. Ничего не заменяет.
Ну а во-вторых, вот в этом месте во время выполнения выскакивает ошибочка:
foreach (string s_1 in strFiles)
Directory.Move(s_1, strDirectory);
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: Source and destination path must have identical roots. Move will not work across volumes.
P.S. насколько я понял, нельзя директориями копировать. Можно копировать только по отдельным файлам. Я вроде бы так и делаю. Сделал это с помощью рекурсии (правда рекурсию делаю в первый раз и не совсем понятно, правильно ли я её сделал).
Dimarik вне форума Ответить с цитированием
Старый 17.04.2011, 11:53   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не работает замена?
а может потому что она вернет новую строку, а не изменит старую?
Код:
strDirectory=strDirectory.Replace(driveName, "C:\\" + VolumeLabel);
хм а почему Directory.Move?
у вас же файл, попробуйте File.Move
ибо папки действительно нельзя между дисками перемещать(надо копировать и потом удалять старую, если не выйдет с File.Move то попробуйте это)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.04.2011, 13:01   #9
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

спасибо. всё заработало.
Dimarik вне форума Ответить с цитированием
Старый 17.04.2011, 20:05   #10
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

и ещё вопрос. Как на C# сделать так чтобы если пользователь вставил флэшку, сработал конкретный код? Я понимаю что хуки надо использовать, но можно поконкретней? и надо отдельно dll делать чтобы работа шла в глобальном режиме?
Dimarik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qt vs. WinAPI Зелёный_спец Общие вопросы C/C++ 3 12.03.2010 15:34
WinAPI for me Kazimir Фриланс 4 14.12.2009 14:36