Re: File copying




On 5 Feb 2011, at 19:18, Kevin DeKorte wrote:


Something like this

   GFile *file;
   GFileOutputStream *output;
   GDataOutputStream *data;

   file = g_file_new_for_uri(uri);
   output = g_file_replace(file, NULL, FALSE, G_FILE_CREATE_NONE, NULL,
NULL);
   data = g_data_output_stream_new((GOutputStream *) output);
   if (data != NULL) {
       g_data_output_stream_put_string(data, "#EXTM3U\n", NULL, NULL);
       g_output_stream_close((GOutputStream *) data, NULL, NULL);
   }

Kevin

Thanks David and Kevin for the suggestions.  That worked fine once I realised that I could cast from 
GFileOutputStream* to GOutputStream*.  I used the built-in macros G_INPUT_STREAM(x) and G_OUTPUT_STREAM(x) 
but I think they essentially do the same thing.

The only problem I'm having now is when I later come to copy the file attributes and last modification time.  
Take a look at this code and tell me if i'm doing something wrong....

void CopyModificationtimeAndAttributes (GFileInfo* pSrcModule, GFileInfo* pDestModule)
{
GTimeVal  tvModificationTime;
gboolean  bIsHidden;

      g_return_if_fail (G_IS_FILE_INFO (pSrcModule));
      g_return_if_fail (G_IS_FILE_INFO (pDestModule));

      g_file_info_get_modification_time (pSrcModule, &tvModificationTime);
      g_file_info_set_modification_time (pDestModule, &tvModificationTime);
      /* Note this line for testing */  g_file_info_get_modification_time (pDestModule, &tvModificationTime);

      /* bIsHidden = g_file_info_get_is_hidden (pSrcModule); */
      /* Note this line for testing */  bIsHidden = true;
      g_file_info_set_is_hidden (pDestModule, bIsHidden);
}

You can see that I specifically set the copied file to be hidden (I'm running this under Windows 7 BTW on a 
FAT32 partition, so no security permissions to worry about).  Note also, that after setting the modification 
time I specifically check (in my debugger) that the destination file has the correct time, which it does.

However, if I navigate to the destination file in Windows Explorer and inspect its properties I see that the 
file wasn't in fact hidden, nor does it have the modification time I specified.  Have I missed out a step?  
For example although you can't see it in the above code I did flush the file contents and closed it (after 
copying the data) but I only unref'd the GFileInfo pointers.  I didn't carry out any similar closing or 
flushing operations for the new time and attributes.  Should I have done something to actually write the 
changed details to disk?

John


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]