2013年10月22日 星期二

C C++ 建立 directory

目前 C // C++   無法在一個不存在的 路徑直接 寫入檔案.
舉例  假設  d:\test\  不存在的話
不能 fopen ("D:\test\data.raw","wb") ;

需要先建立 (create) 路徑 (directory)
路徑也需要一層一層去建立
for example :  d:\abc\def\
沒有辦法 直接  mkder("d:\\abc\\def\\ ")
需要先     mkder("d:\\abc\\")

因此 自己寫了一個 迴圈去處理  開folder




//


#include <stdio.h>
#include <direct.h>

int CreateDir(char* dirpath)
{
    char lpath[200];
    int  pathlen=strlen(dirpath);
    int  idx=0;
    int i;

    for(i=0;i<200;i++)
        lpath[i]=0;

    lpath[0]=dirpath[0];
    lpath[1]=dirpath[1];
    lpath[2]=dirpath[2];

    idx=2;

    while(idx<pathlen){


        do{
            idx++;
            lpath[idx]=dirpath[idx];
            
        }while(lpath[idx]!='\\' && lpath[idx]!=0 );
                        
        mkdir(lpath);    
    }    
    
    return 0;


}


使用方法如下

直接寫個依檔案時

把檔案名稱 拿掉 留下 路徑的 string ,
再呼叫 CreateDir( );

#include <iostream>
#include <fstream>
#include <string>

#include <stdio.h>
#include <direct.h>



int  WriteBinaryFile(char* filename,char* buffer,int size)
{

    string str1,str2;
    int found;
    
    str1=filename;
    found=str1.find_last_of("/\\");
    str2=str1.substr(0,found+1);

    CreateDir((char*)str2.c_str());
    
    
    ofstream  fout; 
    fout.open(filename,ios_base::out|ios_base::binary|ios_base::trunc);
    fout.write ((char*)buffer, size);
    fout.close();
    

    return 0;
    
}

沒有留言:

張貼留言