반응형

- 코드

using System.IO;

FileInfo fileInfo = new FileInfo(@"D:\ubuntu-20.04.2-live-server-amd64.iso");

if (fileInfo.Exists)
{
    Debug.WriteLine("File FullName : " + fileInfo.FullName);
    Debug.WriteLine("File Name : " + fileInfo.Name);
    Debug.WriteLine("File Name : " + fileInfo.Extension);    
    Debug.WriteLine("File Length : " + fileInfo.Length + " byte");

    Debug.WriteLine("File CreationTime : " + fileInfo.CreationTime.ToString());
    Debug.WriteLine("File LastWriteTime : " + fileInfo.LastWriteTime.ToString());

    string copyFilePath = @"D:\ubuntu-20.04.2-live-server-amd64_Copy.iso";
    fileInfo.CopyTo(copyFilePath);
    //fileInfo.CopyTo(copyFilePath, true);

    fileInfo.Delete();
}

 

- 실행 결과

File FullName : D:\ubuntu-20.04.2-live-server-amd64.iso
File Name : ubuntu-20.04.2-live-server-amd64.iso
File Name : .iso
File Length : 1215168512 byte
File CreationTime : 2021-05-19 오후 5:16:41
File LastWriteTime : 2021-04-12 오후 7:51:25

 

- 파일 크기

public long Length { get; }

 

- 파일 전체 경로, 파일 이름, 파일 확장명

// 파일 전체 경로
public virtual string FullName { get; }

// 파일 이름
public abstract string Name { get; }

// 파일의 확장명
public string Extension { get; }

 

- 파일 복사

// 파일 복사
public System.IO.FileInfo CopyTo (string destFileName, bool overwrite);

bool overwrite 
> true : 덮어 쓰기
> false : 덮어 쓰지 않음

 

- 파일 삭제

public override void Delete();
반응형
,
반응형

 

 

- 코드

using System.Diagnostics; // Debug.WriteLine 사용 용도

System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog();

if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    Debug.WriteLine(fbd.SelectedPath);
}

 

System.Windows.Forms.FolderBrowserDialog를 사용하기 위해서는 솔루션 탐색기에서 솔루션의 참조를 마우스 오른쪽 버튼을 클릭하여 참조 관리자를 열어 나오는 목록에서  <System.Windows.Forms> 체크하고 확인 버튼을 클릭하면 돼요.

 

만약에 참조 추가를 해주지 않고 빌드하면 아래처럼 오류가 발생하니 참고하세요.

 

에러 메시지 : <error CS0234: 'System.Windows' 네임스페이스에 'Forms' 형식 또는 네임스페이스 이름이 없습니다. 어셈블리 참조가 있는지 확인하세요.>

 

- 실행 결과

D:\

 

- 버튼 리턴 값 (System.Windows.Forms.DialogResult)

    //
    // 요약:
    //     대화 상자의 반환 값을 나타내는 식별자를 지정 합니다.
    [ComVisible(true)]
    public enum DialogResult
    {
        //
        // 요약:
        //     Nothing 대화 상자에서 반환 됩니다. 즉, 모달 대화 상자 실행을 계속 합니다.
        None = 0,
        //
        // 요약:
        //     대화 상자의 반환 값은 OK (일반적으로 확인 레이블이 붙은 단추에서 보냄).
        OK = 1,
        //
        // 요약:
        //     대화 상자의 반환 값은 Cancel (일반적으로 Cancel 레이블이 붙은 단추에서 보냄).
        Cancel = 2,
        //
        // 요약:
        //     대화 상자의 반환 값은 Abort (일반적으로 중단 레이블이 붙은 단추에서 보냄).
        Abort = 3,
        //
        // 요약:
        //     대화 상자의 반환 값은 Retry (일반적으로 재시도 레이블이 붙은 단추에서 보냄).
        Retry = 4,
        //
        // 요약:
        //     대화 상자의 반환 값은 Ignore (일반적으로 무시 레이블이 붙은 단추에서 보냄).
        Ignore = 5,
        //
        // 요약:
        //     대화 상자의 반환 값은 Yes (일반적으로 예 레이블이 붙은 단추에서 보냄).
        Yes = 6,
        //
        // 요약:
        //     대화 상자의 반환 값은 No (일반적으로 아니요 레이블이 붙은 단추에서 보냄).
        No = 7
    }
반응형
,
반응형

 

○ 필요 헤더

#include <QHostAddress>
#include <QNetworkInterface>

○ 네트워크 인터페이스 전체 주소 가져오기

QList<QHostAddress> addrList = QNetworkInterface::allAddresses();

○ 네트워크 인터페이스 전체 주소 중 IPv4 주소만 출력하기

#include <QHostAddress>
#include <QNetworkInterface>
#include <QDebug>	// 디버그 출력용

QList<QHostAddress> addrList = QNetworkInterface::allAddresses();

foreach(QHostAddress addr, addrList)
{
    if (0 < addr.toIPv4Address())
    {
        qDebug() << addr.toString();
    }
}

- 실행 결과

"192.168.56.1"
"127.0.0.1"

- IPv4, IPv6 인지 확인

// IPv4
quint32 QHostAddress::toIPv4Address(bool *ok) const

// IPv6
Q_IPV6ADDR QHostAddress::toIPv6Address() const
반응형
,
반응형

 

QFile를 이용하여 간단하게 파일 존재 여부, 복사, 삭제 등을 할 수 있어요.

 

○ 헤더

#include <QFile>

○ 파일 존재 여부 확인

bool QFile::exists() const

bool result = QFile::exists(file);

○ 파일 복사

bool QFile::copy(const QString &newName)

bool result = QFile::copy(file, copy_file);

○ 파일 삭제

[static] bool QFile::remove(const QString &fileName)

bool result = QFile::remove(FilePath);

○ 사용 예제 (파일 확인 후 복사, 삭제)

#include <QFile>

QString file = "/home/ubuntu/test.mp4";
QString copy_file = "/home/ubuntu/test_copy.mp4";

if (QFile::exists(file) == true)
{
    if (QFile::copy(file, copy_file) == true)
    {
        QFile::remove(copy_file);
    }
}
반응형
,
반응형

 

QList안에 있는 구조체 아이템의 항목을 기준으로 아이템을 정렬할 수 있어요.

 

○ 헤더

#include <QDebug>	// qDebug() 출력을 위해 추가

struct People
{
    QString Name;
    int Age;
};

 void ShowList(QList<People> list);	// QList 내용 출력 용도

 

○ 메인

void MainWindow::ShowList(QList<People> list)
{
    foreach (People people, list)
    {
        qDebug() << QString("Name : %1 / Age : %2").arg(people.Name).arg(people.Age);
    }
}

// 이름 정렬
bool NameLessThan(const People &s1, const People &s2)
{
    return s1.Name.toLower() < s2.Name.toLower();
}

// 나이 정렬
bool AgeLessThan(const People &s1, const People &s2)
{
    return s1.Age < s2.Age;
}

// Main
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 사람 정보 추가
    QList<People> peopleList;
    peopleList.append(People {"Ghi", 10});
    peopleList.append(People {"Def", 30});
    peopleList.append(People {"Abc", 20});

    qDebug("People List");
    ShowList(peopleList);

    // 이름 정렬
    std::sort(peopleList.begin(), peopleList.end(), NameLessThan);
    qDebug("Sort - Name");
    ShowList(peopleList);

    // 나이 정렬
    std::sort(peopleList.begin(), peopleList.end(), AgeLessThan);
    qDebug("Sort - Age");
    ShowList(peopleList);
}

 

○ 실행 결과

Debugging starts
People List
"Name : Ghi / Age : 10"
"Name : Def / Age : 30"
"Name : Abc / Age : 20"
Sort - Name
"Name : Abc / Age : 20"
"Name : Def / Age : 30"
"Name : Ghi / Age : 10"
Sort - Age
"Name : Ghi / Age : 10"
"Name : Abc / Age : 20"
"Name : Def / Age : 30"
반응형
,